bash 中的双引号

bash 中的双引号

我正在尝试创建一个 bash 文件,该文件调用一个程序,该程序需要在两个双引号之间提交一个参数。

看看我的文件内容。

#!/bin/bash
echo ./yowsup/yowsup-cli demos --s $1 \"$2\" -c yowsup/config &
./yowsup/yowsup-cli demos --s $1 \"$2\" -c yowsup/config &

echo 部分准确地打印了我需要的命令,但是当我执行它(下一行)时,我把它弄乱了。

我怎样才能解决这个问题?

谢谢!

这就是我需要如何称呼它:

./yowsup/yowsup-cli demos --s 9999999999 "my parameter" -c yowsup/config

回显结果:

./yowsup/yowsup-cli demos --s 9999999999 "my parameter" -c yowsup/config

调用结果:

demos: error: unrecognized arguments: parameter

复制并粘贴回显结果:

INFO:yowsup.demos.sendclient.layer:Message sent

答案1

您需要转义命令中的引号echo才能在输出中看到它们,但不应在实际命令中转义它们:

#!/bin/bash
echo ./yowsup/yowsup-cli demos --s $1 \"$2\" -c yowsup/config &
./yowsup/yowsup-cli demos --s $1 "$2" -c yowsup/config &

实际命令中使用引号是为了防止拆分$2包含多个单词的 - 。

答案2

我(几乎)总是引用所有内容来“echo”,所以我会像上面那样做:

#!/bin/bash
echo "./yowsup/yowsup-cli demos --s $1 \"$2\" -c yowsup/config &"
./yowsup/yowsup-cli demos --s $1 "$2" -c yowsup/config &

与 @muru 解决方案的区别在于,原始 echo 命令在“后台”运行 - 这里它回显到前台屏幕,但作为后台命令运行。 (@muru 也不在命令末尾显示 & 符号。)

相关内容