我试图使用不带引号的字符串扩展将两个参数传递给 tar; 第一个是命令行标志--exclude
,第二个包含一个*
字符。为了避免过早的通配符,我尝试引用*
:
shopt -s nullglob
x="--exclude '*'"
echo tar $x
让我惊讶的是,'*'
完全消失了!这是输出:
tar --exclude
我知道我可以从 POSIX shell 切换到 Bash 并使用数组来避免这个令人头疼的问题。但我仍然想知道:那个 POSIX shell 片段到底是怎么回事?为什么它删除了引用的 glob?我本以为它会保留引用的部分,或者一路扩展并扩展全局。但它两者都没有做到。