我正在编写一个使用 rsync 并根据某些设置排除文件的脚本。我最终得到了一个格式为--exclude={foo, bar, baz}
.
但是,在尝试在rsync
命令中扩展它时,我注意到标志被转义了。从 bash 调试器中,我可以看到我的命令rsync $excludes
become rsync '--exclude={foo,bar,baz}'
,而不是预期的rsync --exclude={foo,bar,baz}
. 做一些测试,我发现任何包含=
, {
, or的字符串}
在展开时都会被单引号包裹起来。没有在构造的字符串上使用 eval ,有没有办法解决这个问题?
引用时不会发生大括号扩展。您还应该将参数存储在数组而不是变量中(如果可能)。
我认为以下内容应该适合您:
如果您指的是
xtrace
输出 (set -x
),那么当参数包含特殊字符时,它确实喜欢在单引号中显示参数。输出的格式可用作 shell 的输入。但这并不意味着引号是字符串的一部分。
相比:
尽管据我所知,引用包含等号的字符串并不麻烦。