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

相关文章

用的openwrt路由器,家里宽带申请了动态公网ip,为了方便把2...
#!/bin/bashcommand1&command2&wait从Shell脚本并行...
1.先查出MAMP下面集成的PHP版本cd/Applications/MAMP/bin/ph...
1、先输入locale-a,查看一下现在已安装的语言2、若不存在如...
BashPerlTclsyntaxdiff1.进制数表示Languagebinaryoctalhexa...
正常安装了k8s后,使用kubect工具后接的命令不能直接tab补全...