Bash中哪些类型的括号内使用变量需要加$进行扩展
Bash各类括号语法的变量
$符号使用规则 ():普通子shell执行括号,属于常规命令执行环境,*必须加$*才能触发变量扩展,直接写变量名会被识别为命令而非变量值(()):算术运算括号,属于算术上下文,绝大多数情况不需要加$,直接写变量名就会自动解析变量的整数值,只有当变量名和算术运算符/保留字冲突、或者需要间接引用时才需要加${}:分两种场景:- 代码块括号:属于常规命令执行环境,*必须加
$*才能触发变量扩展 - 花括号扩展:如果是在扩展结构里引用变量作为范围的一部分,*必须加
$*才能正确解析
- 代码块括号:属于常规命令执行环境,*必须加
[[ ]]:条件测试括号,规则分场景:- 做字符串比较、路径匹配时,建议加
$,不加的话部分场景会被识别为字面量而非变量 - 做算术比较(比如
[[ a -gt b ]]格式)时,变量名可以不加$自动解析整数值
- 做字符串比较、路径匹配时,建议加
$():命令替换括号,属于常规命令执行环境,*必须加$*才能触发括号内部的变量扩展$(( )):算术扩展括号,属于算术上下文,和(())规则一致,内部引用变量不需要加$,直接写变量名就会自动解析为整数值,外层自带的$作用是把最终算术结果扩展到外层上下文
注意:如果变量值为空或者包含特殊字符,即使是允许不加
$的算术上下文,也建议养成加双引号包裹变量的习惯,避免意外的分词或路径扩展问题。
内容的提问来源于stack exchange,提问作者Caterina
相关产品推荐
相关产品推荐

