我在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")
第一种方式对我来说很直观。
第二种方式类似于来自parent-shell的子shell中的独立引用,如
"$(command "aug")" # quote in sub-shell is independent from one in parent-shell
我在bash手册中找不到这个问题的说明。
有人知道它是如何工作的,请告诉我。谢谢。
答案 0 :(得分:2)
在表格
的任何转让声明中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