2017-07-06 10 views
8

次のコマンドを実行すると、bashシェルでエラーが発生しますが、Kornシェルでは正常に動作します。唯一の相違点は、awkの終わりに一重引用符がないことです。理由を理解するのを助けてくれますか? Kornシェルでなぜbashはペアリングされていない引用符をkshで許可していますか?

echo `echo "a b c d" | awk '{ print $1 }` 
+6

これはちょっと間違っています。引用符はペアになっていなければなりません。 –

+0

私のkshにもエラーはありません。(os x)。驚くべきことだ! – jas

+6

エラーは正しい動作であるため、bashでは完全に正常に動作していますが、Kornでは正しく動作していないようです。 –

答えて

1

、バックティックと引用符の両方がトークナイザがしようとするとどちらかが終了して、適切に一致する場所を推測し、比類のないままにすることができます。

例:両方の例は、上述した動作のために異なる場合を示し方法

/home/ufierro # echo "`echo ah" 
+ echo ah 
+ echo ah 
ah 

/home/ufierro # echo `echo 'hello world` 
+ echo 'hello world' 
+ echo hello world 
hello world 

注意。 最初の例は、二重引用符で囲まれた単一のバックティックが解析中にどのように完了したかを示し、第2の例はバックティック内の一重引用符もどのようにして完了したかを示しています。

+0

ありがとう。私はそれが推測しようとしているかもしれないと推測しましたが、私は理由を知りたいと思っていました。エラーが発生しにくいか、具体的なロジックがないのでそうでないでしょうか? – user1578026

+0

特定の引用符/バックティックのセット内でのみ発生する実際の動作です。解析されるトークンと一致し、エラーを防止するためにクォートを終了しようとしますが、エラーを生成しない限り、こちらです。 –

関連する問題