微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

bash – 在字符串中命令替换复合命令

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]不包含格式字符串.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐