コマンド置換でバックスラッシュの奇妙な動作を説明できる人はいますか?

コマンド置換でバックスラッシュの奇妙な動作を説明できる人はいますか?

私はそれをbashで見つけました。

echo `echo \\`

出力\

\

しかし、

echo `echo \\ `

何も出力されません

ベストアンサー1

これバックスラッシュスタイルコマンドの置き換えでは、バックスラッシュの文書化された動作は次のとおりです。:

古いスタイルのバックティック代替フォーマットを使用する場合、バックスラッシュは、「$」、「`」、または「\」が後に来ない限り、文字通りの意味を維持します。

つまり、バックスラッシュはドル記号、バックティック、バックティックをエスケープします。その他のバックスラッシュ処理のためにシェルにコマンドを提供する前(バックスラッシュエスケープと引用符の一般的な処理前を含む)これは、次のことを意味します。

`echo \\ `

等しい

$(echo \ )

そして空白を出力します。単一のスペースは引数として外部に挿入され、通常はフィールド分割中に失われるため、引数なしで実行されますechoecho

一方、

`echo \\`

\コマンドの最後にぶら下がっている部分は通常違法であり(別の場所でその行を続行することを意味します)、リテラルとして扱われます。bashどちらもdash好きですtcshが、zshそうではありません。明示的に明記されていないようです。POSIXではあるいは、他の場所では、これが実装定義の動作であると仮定します。


代わりに$( ... )コマンド置換を使用すると、中断することなくすべてのスクリプトを作成できます。バックティックの交換よりほぼ常に良いです。

おすすめ記事