侧边栏壁纸
博主头像
落叶人生博主等级

走进秋风,寻找秋天的落叶

  • 累计撰写 130562 篇文章
  • 累计创建 28 个标签
  • 累计收到 9 条评论
标签搜索

目 录CONTENT

文章目录

认识 Shell 脚本里的小括号们——分析“()”与“(())”的区别

2023-12-04 星期一 / 0 评论 / 0 点赞 / 66 阅读 / 2117 字

() 的三种用法①命令组。语法为 (command),其中的命令会在新开的子 Shell 中依次执行。a=1(a=2 ; echo $a)echo $a运行结果为:21题外话——() 与 {} 的区别

() 的三种用法

①命令组。语法为 (command),其中的命令会在新开的子 Shell 中依次执行。

a=1(a=2 ; echo $a)echo $a

运行结果为:

21

题外话——(){} 的区别:

(cmd1 ; cmd2 ; cmd3) 是在子 Shell 中顺序执行;{ cmd1; cmd2; cmd3; } 是在当前 Shell 中顺序执行。在括号中的重定向符号只影响特定命令,在括号外的重定向符号影响全部命令。

②命令替换。语法为 $(command),替代传统的 “`command`”,可能有 Shell 不支持。

命令替换是指 Shell 会预先扫描一遍脚本,发现命令替换的结构,将其中的命令执行一次,得到其标准输出,再将此输出放到原来命令替换的位置,执行替换后的脚本。

$() 比 “``” 在设计上引入了两点改进:

  1. 不再转义其中的 /x
  2. 允许嵌套

题外话——$()${} 的区别:前者是命令替换,后者是变量替换。

③数组初始化。语法为 arr=(e1 e2 e3)

(()) 的两种用法

①整数扩展。只要符合C语言中的运算规则即可,不支持浮点数!

其中的变量名可以不加 $ 前缀。

forwhileif 命令进行了扩展,可协同使用。

((expr)) 结构计算一个算术表达式的值,非 0 视为真,退出状态码 0,0 视为假,退出状态码 1。

$ a=0; ((++a)) && echo True || echo FalseTrue$ a=0; ((a++)) && echo True || echo FalseFalse

②使用 $((expr)) 来获取表达式的值,注意这不是命令替换的语法!

a=1$ echo $((a+1))2

广告 广告

评论区