为什么在bash中用引号引起来的变量扩展中的引号能很好地工作?

必须

我正在用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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章