赋值变量时如何使用双引号?

How to use double quotes when assigning variables?

有一个 bash 文件,内容如下:

FOO=${BAR:-"/some/path/with/$VAR/in/it"}

那些双引号是必要的吗?根据以下测试,我会说不,并且在上述作业中根本不需要引用。事实上,它是该变量的用户需要在双引号内展开它以避免错误拆分。

touch 'some file'  # create a file
VAR='some file'    # create a variable for that file name
FOO=${BAR:-$VAR}   # use it with the syntax above, but no quotes
ls -l "$FOO"       # the file does exist (here we do need double quotes)
ls -l $FOO         # without quotes it fails searching for files `some` and `file`
rm 'some file'     # remove temporary file

我说的对吗?或者还有更多?

Are those double quotes necessary?

不是这种情况,不是。

Am I correct?

是的。而且它是总是必须引用它的变量的用户 - 扩展变量时字段拆分是运行,所以在使用时它必须被引用。

也有例外,例如 case $var insomevar1=$somevar2 - 不进行 运行 字段拆分的上下文,因此不需要引用。但无论如何,引号在这种情况下并没有什么坏处,无论如何都可以使用。

Or there's something more?

来自POSIX shell

2.6.2 Parameter Expansion

In addition, a parameter expansion can be modified by using one of the following formats. In each case that a value of word is needed (based on the state of parameter, as described below), word shall be subjected to tilde expansion, parameter expansion, command substitution, and arithmetic expansion.

${parameter:-word}

因为 field splitting expansion${parameter:-word} 中并不 运行 超过 word,确实,引用并没有多大作用。