我正在用bash学习报价。我有一个密码
unset unset_var
test_var="${unset_var:-"abc"}"
echo "test_var = $test_var"
tset_var = abc
我的问题来自“ $ {unset_var:-“ abc”}”行
我以两种方式对这条线进行了插补,
第一种方法是
"${unset_var:-"abc"}" =
(quoted string: "${unset_var:-") +
(unquoted string: abc) +
(quoted string: "}")
第二种方法是
"${unset_var:-"abc"}" =
("${}") + (abc:-"abc")
第一种方式对我来说很直观。
第二种方式类似于父级外壳在子外壳中的独立引用,例如
"$(command "aug")" # quote in sub-shell is independent from one in parent-shell
我在bash手册中找不到有关此问题的说明。
知道其运作方式的人,请告诉我。谢谢你。
在任何形式的赋值声明中
name=value
value
进行引号删除,即除去不是由于对进行扩展的引号value
。
和
test_var="${unset_var:-"abc"}"
参数扩展周围的引号显然不是任何扩展的结果,因此将其删除。问题是,如何处理内引号?
根据手册页,
在[
${parameter:-word}
]中,word
可以进行波浪号扩展,参数扩展,命令替换和算术扩展。”
但是,由于"abc"
没有经历这四个命名扩展中的任何一个,因此周围的引号不是扩展的乘积,因此每次删除引号时都会将其删除。因此,
test_var="${unset_var:-"abc"}"
相当于
test_var="${unset_var:-abc}"
相当于
test_var=abc
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句