3
$ sh
sh-3.2$ if
> ps -ef | grep apple ;
> then
> echo APPLE 
> fi ;
lazer   7584  7571  0 04:36 pts/4    00:00:00 grep apple
APPLE
sh-3.2$ exit
exit
$ which sh
/bin/sh
$ /bin/sh -c if ps -ef | grep apple ; then echo APPLE fi ;
bash: syntax error near unexpected token `then'
$

上記のように、単純な if ステートメントは行ごとに実行すると期待どおりに機能しますが、を使用して実行すると次のエラーが発生しますsh -c

bash: 予期しないトークン「then」の近くで構文エラーが発生しました

ここで何が欠けていますか?

4

1 に答える 1

2

インタラクティブ シェルは、 を介して呼び出しをエスケープしますsh -c。特に、セミコロンの後のすべてを新しいステートメントとして取っています。

あなたが食べているものすべてを引用してください/bin/sh

$ /bin/sh -c "if ps -ef | grep apple ; then echo APPLE fi ;"

すべてを1行に凝縮していることを考えると、セミコロンを使用してさらに区切る必要があるかもしれません。

于 2012-04-13T11:42:53.420 に答える