【发布时间】:2020-09-20 16:08:04
【问题描述】:
我正在使用一个变量来组合命令:
#!/bin/bash
cmd=$(sudo -i -u $domain wp --path=$path)
$cmd post create --post_type=page --post_status=publish --post_title='Page1'
$cmd post create --post_type=page --post_status=publish --post_title='Page110'
$cmd widget delete $($cmd widget list sidebar-1 --format=ids)
edit1:使用 cmd='sudo -i -u $domain wp --path=$path';echo $cmd |bash
的示例 #!/bin/bash
cmd='sudo -i -u $domain wp --path=$path'
echo $cmd --post_type=page --post_status=publish --post_title='Page1'|bash
echo $cmd widget delete $(echo $cmd widget list sidebar-1 --format=ids|bash)|bash
尝试执行上述操作时出现错误。我试过用'single quotes' 和"double quotes" 代替(parenthesis),但是不行。
我知道我可以在完成时放入一个临时变量并替换,但我真的很想知道如何在 bash 中组合命令。
edit2:创建了一个简单版本来测试建议的答案:
#!/bin/bash
tmpcmd="history| grep "
echo "$tmpcmd ls"|bash
输出为:空白
【问题讨论】:
-
cmd=$(command) 将变量 cmd 设置为执行命令的输出。
-
如上和......你可能想要
cmd="sudo -i -u $domain wp --path=$path",但你上面包含的结构已经成熟,难以破译问题。祝你好运。 -
请添加一个shebang,然后将您的脚本粘贴到shellcheck.net 并尝试实施那里提出的建议。
-
在变量中存储命令(或其中的一部分)往往效果不佳,除非是简单的情况,最好避免。变量用于存储数据,而不是可执行代码。见BashFAQ #50: "I'm trying to put a command in a variable, but the complex cases always fail!"
标签: bash command string-interpolation