Cor*_*ein 13 shell bash quoting
> echo "hi"
hi
> VAR='echo "hi"'
> $VAR
"hi"
Run Code Online (Sandbox Code Playgroud)
为什么上述命令的输出不同?
单引号也会发生类似的事情:
> VAR="echo 'hi'"
> $VAR
> 'hi'
Run Code Online (Sandbox Code Playgroud)
man*_*ork 17
额外的报价对只会被额外的评估步骤消耗。例如被强制eval:
bash-4.2$ VAR='echo "hi"'
bash-4.2$ $VAR
"hi"
bash-4.2$ eval $VAR
hi
Run Code Online (Sandbox Code Playgroud)
但通常将带有参数的命令放在一个字符串中是一个坏主意。改用数组:
bash-4.2$ VAR=(echo "hi")
bash-4.2$ "${VAR[@]}"
hi
Run Code Online (Sandbox Code Playgroud)