arg1=$(printf win && printf 32) echo $arg1 contents='printf win && printf 32' arg1=$($contents) echo $arg1 arg1=$( { eval $contents; } ) echo $arg1
结果是:
win32 win win32
为什么$($内容)不起作用?可以假设命令替换通过插入声明的命令的stdout来工作……?
此外,当内容=’echo win&& echo 32’它返回win&&回声32
解决方法
因为参数替换发生在逻辑运算符解析之后.
Bash不知道有&&,所以printf win&& printf 32解释如下:
argv[0]: printf argv[1]: win argv[2]: && argv[3]: printf argv[4]: 32
printf忽略以argv [2]开头的所有参数,因为argv [1]不包含格式字符串.