Bashの二重引用符

Bashの二重引用符

2つの二重引用符の間に引数を送信する必要があるプログラムを呼び出す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はコマンドの最後にアンパサンドを表示しません。)

関連情報