"$x"至少一开始总是使用。正确的情况远远超过错误的情况。
参数扩展同时受单词拆分和路径名扩展的约束,您通常都不需要。引用扩展保留参数的文字内容。
比较
$ x="foo * bar"
$ printf '%s\n' "$x"
foo * bar
Run Code Online (Sandbox Code Playgroud)
至
$ printf '%s\n' $x
foo
<every file in the current directory>
bar
Run Code Online (Sandbox Code Playgroud)
如果您的逻辑确实需要进行单词拆分或路径名扩展,则很有可能需要更改脚本设计以避免该要求。
始终引用参数扩展至少会减少您需要修复的错误的数量。
因此,从来没有理由使用无${foo[@]}引号。@索引的存在是*在引用时具有特殊的行为(与索引相比)。如果不加引号,则两者是相同的,因此您最好使用${foo[*]}。
相同的参数适用于特殊参数$@和$*。
$ x=("foo bar" baz)
$ printf '%s\n' "${x[@]}" # expands to two elements words, one per element
foo bar
baz
$ printf '%s\n' "${x[*]}" # expands to one word; elements join using IFS
foo bar baz
$ printf '%s\n' ${x[*]} # expands to three words
foo
bar
baz
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
95 次 |
| 最近记录: |