linux中shell的小括号、大括号的用法区别

2023-11-09


Linux中小括号()和大括号{}都是对其中的一串命令进行执行,但有一定的区别,其区别如下:



1 小括号()


①命令组。括号中的命令新开一个子shell程序,括号中的变量为本地变量 ,不能够在脚本其他部分使用。括号中多个命令之间用分号隔开。

备注:
在括号中的变量,由于是在子shell中,所以对于脚本剩下的部分是不可用的. 
父进程, 也就是脚本本身, 将不能够读取在子进程中创建的变量, 也就是在子shell中创建的变量.
(cmd1;cmd2;cmd3)

②命令替换。命令替换$(cmd)等同于`cmd`(这不是单引号,`是ESC下面的那个键) ,shell执行过程中发现了$(cmd)结构,便将$(cmd)中的cmd执行一次,得到其输出,再将此输出放到原来命令。例如:


[root@localhost tmp]# ls


fstab  functions  hellobash  issue  mytestdir  scripts


[root@localhost tmp]# echo $(ls)


fstab functions hellobash issue mytestdir scripts


[root@localhost tmp]# echo `ls`


fstab functions hellobash issue mytestdir scripts


[root@localhost tmp]# 


③用于初始化数组。如:arr=(m n)

2 大括号


①拓展。对大括号中的文件名做扩展。在大括号中,不允许有空白,除非这个空白被引用或转义。拓展分为普通以逗号(,)进行拓展,如echo {a,b}.txt将间隔的各项内容均列出;已两个点(..)进行拓展,如echo {1..5}.txt自动补全1到5中间内容。


[root@localhost ~]# echo {a,b}.txt


a.txt b.txt


[root@localhost ~]# echo {1..5}.txt


1.txt 2.txt 3.txt 4.txt 5.txt


[root@localhost ~]# 


②内部组 。与小括号中的命令不同,大括号内的命令在当前shell运行,不会重新开子shell。
括号内的命令间用分号隔开,最后一个命令后必须跟分号。{}的第一个命令和左括号之间必须要有一个空格。





3 (( ))
  
(( ... ))结构可以用来计算并测试算术表达式的结果. 退出状态将会与[ ... ]结构完全相反!还可应用到c风格的for,while循环语句,(( )) 中,所有的变量(加不加$无所谓)都是数值。


$((...))结构的表达式是C风格的表达式,其返回的结果是表达式值,其中变量引用可不用‘$’(当然也可以)


for((...;...;...))
do
  cmd
done


while ((...))
do
  cmd
done


比较操作符


<


    小于


    (("$a" < "$b"))
<=


    小于等于


    (("$a" <= "$b"))
>


    大于


    (("$a" > "$b"))
>=


    大于等于


    (("$a" >= "$b"))


(( 0 ))
echo "Exit status of `(( 0 ))` is $?."         # 1
   
(( 1 ))
echo "Exit status of `(( 1 ))` is $?."         # 0


(( 5 > 4 ))                                      # 真
echo "Exit status of `(( 5 > 4 ))` is $?."     # 0


(( 5 > 9 ))                                      # 假
echo "Exit status of `(( 5 > 9 ))` is $?."     # 1


(( 5 - 5 ))                                      # 0
echo "Exit status of `(( 5 - 5 ))` is $?."     # 1


(( 5 / 4 ))                                      # 除法也可以.
echo "Exit status of `(( 5 / 4 ))` is $?."     # 0


(( 1 / 2 ))                                      # 除法的计算结果 < 1.
echo "Exit status of `(( 1 / 2 ))` is $?."     # 截取之后的结果为 0.
                                                  # 1
or ((a=1; a <= LIMIT ; a++))  # 双圆括号, 并且"LIMIT"变量前面没有"$".
do
   echo -n "$a "
done


while (( a <= LIMIT ))   # 双圆括号, 变量前边没有"$".
do
   echo -n "$a "
   ((a += 1))   # let "a+=1"
done


a=2
b=$(($a*4))     #a=2 b=8
c=$((a*3))      #a=2 c=6











总结:


()会开启一个新的子shell,{}不会开启一个新的子shell

(())常用于算术运算比较,[[]]常用于字符串的比较.

$()返回括号中命令执行的结果

$(())返回的结果是括号中表达式值

${ }参数替换与扩展













本文转自:

http://blog.csdn.net/damotiansheng/article/details/44196769

https://jingyan.baidu.com/article/676629977eddbb54d41b8454.html


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

linux中shell的小括号、大括号的用法区别 的相关文章

  • 运行 shell 命令并将输出发送到文件?

    我需要能够通过 php 脚本修改我的 openvpn 身份验证文件 我已将我的 http 用户设置为免通 sudoer 因为这台机器仅在我的家庭网络中可用 我目前有以下命令 echo shell exec sudo echo usernam
  • PHP exec rm -Rf 不适用于子目录

    我试图删除特定文件夹中的所有内容 但它似乎不会影响子文件夹 但它应该 因为 bash 命令是从控制台执行的 system rm Rf some dir 该命令中不需要星号 如果要与文件一起删除目录 请同时删除斜杠 留下斜杠将删除文件 但保留
  • Grep 递归和计数

    需要在具有大量子目录的目录中搜索文件内的字符串 我在用着 grep c r string here 我怎样才能找到总数量 如何仅输出至少具有一个实例的文件 使用 Bash 的进程替换 这给出了我认为是您想要的输出 如果不是 请澄清问题 gr
  • 套接字发送调用被阻塞很长时间

    我每 10 秒在套接字上发送 2 个字节的应用程序数据 阻塞 但发送调用在下面的最后一个实例中被阻塞超过 40 秒 2012 06 13 12 02 46 653417 信息 发送前 2012 06 13 12 02 46 653457 信
  • Ctrl-p 和 Ctrl-n 在 Docker 下表现异常

    For the life of me I can t seem to figure out why ctrl p and ctrl n don t work like they re supposed to under the Docker
  • aarch64 Linux 硬浮点或软浮点

    linux系统有arm64 有arm架构armv8 a 如何知道 Debian 运行的是硬浮动还是软浮动 符合 AAPCS64 GNU GCC for armv8仅提供硬浮动aarch64工具链 这与 armv7 a 的 GCC 不同 后者
  • Apache LOG:子进程 pid xxxx 退出信号分段错误 (11)

    Apache PHP Mysql Linux 注意 子进程 pid 23145 退出信号分段错误 11 tmp 中可能存在 coredump 但 tmp下没有找到任何东西 我怎样才能找到错误 PHP 代码中函数的无限循环导致了此错误
  • 查找并删除超过 x 天的文件或文件夹

    我想删除超过 7 天的文件和文件夹 所以我尝试了 17 07 14 email protected cdn cgi l email protection find tmp mindepth 1 maxdepth 1 ctime 7 exec
  • 使用 --prof 选项创建多个日志文件而不是一个 v8.log 的节点

    我正在尝试使用 prof 选项来分析我的 Node 应用程序 但我发现不是一个单一的 v8 log 文件 而是使用诸如isolate 0x9582b40 v8 log isolate 0xa1cab78 v8 6049 等前缀创建的多个文件
  • 如何指定配置脚本的包含目录

    我的工作场所有一个 Linux 系统 其中包含相当旧的软件包 并且没有 root 访问权限 我正在从源代码编译我需要的包 prefix somewhere in homedir 我的问题是我只是不知道如何说服配置在特定目录中查找头文件 源码
  • Unix 中的访问时间是多少

    我想知道访问时间是多少 我在网上搜索但得到了相同的定义 读 被改变 我知道与touch我们可以改变它 谁能用一个例子来解释一下它是如何改变的 有没有办法在unix中获取创建日期 时间 stat结构 The stat 2 结构跟踪所有文件日期
  • Java时区混乱

    我正在运行 Tomcat 应用程序 并且需要显示一些时间值 不幸的是 时间快到了 还有一个小时的休息时间 我调查了一下 发现我的默认时区被设置为 sun util calendar ZoneInfo id GMT 08 00 offset
  • 如何在 Bash 中删除字符串的第一部分?

    该代码将给出第一部分 但是如何删除它并获取没有第一部分的整个字符串 echo first second third etc cut d f1 你应该看看info cut 这将解释什么f1 means 实际上我们只需要第二个字段之后的字段 f
  • tcsh 脚本 if 语句

    我需要循环遍历一堆不同的场景 变量场景 但无法弄清楚如何在 tcsh shell 脚本中使用 if 语句 收到错误 if 表达式语法 有人可以告诉我我有什么问题吗 简化代码如下 谢谢 bin tcsh f set val 0 foreach
  • 通过 shell 脚本查找“非”硬链接的文件

    给定一个目录 如何找到其中的所有文件 以及任何子目录 not硬链接文件 或者更具体地说 这不是具有多个引用的硬链接文件 基本上我想扫描一个文件夹并返回一个列表unique该目录中的文件 包括目录和符号链接 不是它们的目标 如果可能的话 最好
  • 为什么无论 -rdynamic 如何,backtrace 都不包含 Objective-C 符号?

    Update 我正在 Linux 上使用 GNU 运行时 问题是not发生在带有 Apple 运行时的 MacOS 上 更新2 我在 MacOS 上编译了 GNU 运行时并用它构建了示例 该错误确实not发生在带有 GNU 运行时的 Mac
  • Linux下单个目录下文件过多会怎样?

    如果一个目录中有大约 1 000 000 个单独的文件 大部分大小为 100k 其中没有其他目录和文件 是否会以任何其他可能的方式降低效率或产生缺点 ARG MAX 会对此提出异议 例如 rm rf 在目录中时 会说 参数太多 想要执行某种
  • 如何在 Linux 中向热敏打印机发送 ESC/POS 命令

    我正在尝试在热敏打印机上发送 ESC POS 命令 但每当我发送它们时 热敏打印机都会将它们打印为文本 而不是作为命令执行它们 我在 prn 文件中编写这些命令 每当我执行 lp 命令来打印文件时 这些 prn 文件也会被打印 但作为文本
  • 在 MacOS 上构建需要 net461 的 dotnet SDK 项目的最简单方法

    我有一个 dotnet SDK sln and a build proj with
  • 每个虚拟主机的错误日志?

    在一台运行 Apache 和 PHP 5 的 Linux 服务器上 我们有多个带有单独日志文件的虚拟主机 我们似乎无法分离 phperror log虚拟主机之间 覆盖此设置

随机推荐

  • Object.hasOwn 低版本浏览器兼容性问题解决

    使用 hasOwn 去测试属性是否存在 报错如下 原因 hasOwn是es2022新语法 旧浏览器不支持 解决方案 使用Object hasOwnProperty 代替 Object prototype hasOwnProperty cal
  • 随机森林算法

    转载自 http www zilhua com 629 html 1 随机森林使用背景 1 1 随机森林定义 随机森林是一种比较新的机器学习模型 经典的机器学习模型是神经网络 有半个多世纪的历史了 神经网络预测精确 但是计算量很大 上世纪八
  • QGIS 加载WMS数据,重新投影

    1 加载WMS数据 点击需要的栅格数据 注意这里的投影是EPSG 3857 实际需要转换成WGS84 EPSG 4326 一个简单的方法 先在QGIS加载一个shp 投影方式为WGS84 再加载栅格数据 点击set project CRS
  • 告别尬聊,觅伊迎来Z世代青年的社交新世界

    什么是Z世代 从定义上看 Z世代泛指出生在1995年到2005年前后的人群 根据相关数据统计 目前我国 Z世代 年轻人多达2 64亿人 约占我国人口总数的19 因为基数较大 所以在许多从业者的眼中 Z世代作为未来互联网的主力人群 是所有产品
  • docker-swarm ui shipyard部署

    shipyard 搭建 参考网址 https shipyard project com docs deploy https juejin im entry 588940fc2f301e0069b2397d 下载shipyard相关的镜像 为
  • OpenGL学习笔记三(编译着色器)

    运行着色器程序 ps 大部分出自 LearnOpenGL 上一篇 OpenGL学习笔记二 着色器 说到什么是着色器 如何写着色器 这次我们要开始运行我们写好的着色器代码了 着色器程序的创建与C C 程序的创建相似 首先你需要编写着色器程序文
  • C++的宏观与微观

    宏观世界是由微观世界所组成 这是亘古不变的道理 C 同样是这样 如果说生物是由原子组成的 那么C 就是由对象模型组成的 对象模型就相当于原子模型 对象模型的变化和互相联系形成了目前C 一切的特性 再说C 宏观 C 的宏观表现为面向对象 由此
  • Java并发编程系列 - Java内存模型

    Java并发编程 可见性 原子性 有序性 Java内存模型如何解决可见性 有序性 并发问题产生的根源 可见性 原子性 有序性 可见性 Java内存模型的主要目标是定义程序中变量的访问规则 即在虚拟机中将变量存储到主内存或者将变量从主内存取出
  • git从本地仓库提交到远程仓库过程教学

    前提 本地安装了git并且注册了gitee的前提下 教大家如何关联远程仓库 上传本地项目到开源社区 1 先在远程创建个仓库 创建成功 2 在本地项目右键点击Git Bash Here 执行git init初始化本地仓库 3 将本地仓库和远程
  • Ubuntu搭建Pytorch环境(Anaconda、Cuda、cuDNN、Pytorch、Python、Pycharm、Jupyter)

    Ubuntu搭建Pytorch环境 Anaconda Cuda cuDNN Pytorch Python Pycharm Jupyter 一 配置镜像源 安装必要环境 二 Anaconda的下载 安装 卸载及环境配置 1 下载Anacond
  • SpringBoot框架

    目录 1 1 简介 1 2 特性 1 3 四大核心 2 springboot入门案例 2 1 SpringBoot 项目开发步骤 2 2 创建一个 Spring MVC 的 Spring BootController 2 3 分析 2 4
  • 如何从0到1做一次完整的安全测试

    大家好 我是馨馨 一个混过大厂 待过创业公司 有着6年工作经验的软件测试妹纸一枚 近期针对公司项目做了一次完整的安全测试 扫描出来了不少漏洞 价值还挺大的 回顾整个流程 并没有特别复杂的点 小林星球这里程序员还挺多 想着分享下我的实战感悟
  • python -图例设置

    1 使用方法 方法1 ax legend line1 line2 line3 label1 label2 label3 方法2 line1 ax plot 1 2 3 label label1 line2 ax plot 1 2 3 lab
  • swift4.0 项目中的随机校验码(验证码)

    在开发中注册的时候移动端要求我们获取随机校码 完整代码 class CodeView UIView var changeString String 验证码的字符串 let kLineCount 6 let kLineWidth CGFloa
  • Anaconda入门基本操作

    文章目录 1 配置环境变量 2 基础操作 2 1 activate 2 2 创建自己的虚拟环境 2 3 切换环境 3 安装 卸载第三方包 4 查看环境包信息 5 导入导出环境 6 删除环境 慎用 7 总结当前命令 1 配置环境变量 如果是w
  • 数据仓库实施

    文章目录 一 数据分析挖掘过程 1 数据获取 2 数据处理 3 数据建模 4 模型评价 5 数据可视化 二 ETL过程 1 数据特征 2 过程描述 3 ETL 1 数据抽取 2 数据清洗 3 数据转换 4 数据加载和索引 4 kettle
  • git项目管理,这些就够了

    环境 ubuntu16 04 参考 https baijiahao baidu com s id 1621620608602705821 wfr spider for pc https www cnblogs com Sharley p 6
  • 关于前端在一个选择框中选择多个内容的操作

    直接上效果图 以上效果为 可选择多个内容放在框里 再作相应操作将内容传给后端 一 在html的body的form表单下码一个div
  • qt usb热插拔,windows版本,环境qt5.12.9和win10

    写文章的目的 自己要做windows上的usb通信 但是找遍全网都没找到完整的 虽然有热插拔相关的 但是热插拔的监测不够全面 基本都是只能监测部分的插拔 并且大家都推荐使用libusb库 但是使用了一下该库 哎哟我去 暂时还不支持windo
  • linux中shell的小括号、大括号的用法区别

    Linux中小括号 和大括号 都是对其中的一串命令进行执行 但有一定的区别 其区别如下 1 小括号 命令组 括号中的命令新开一个子shell程序 括号中的变量为本地变量 不能够在脚本其他部分使用 括号中多个命令之间用分号隔开 备注 在括号中