私はUnix、Linux、Bash、Zshなどのシェルに関して、「バックティックはもう使用されていません」というフレーズを使用している他のサイトでこのコメントを数回見ました。
この声明は本当ですか、偽ですか?
ベストアンサー1
「未使用」には2つの異なる意味があります。
廃止予定:(主にソフトウェア機能)は使用できますが、使用されなくなったため、一般的に置き換えられているので避けるのが最善です。
——新しいオックスフォードアメリカ辞書
この定義によると、バックティックはい廃止予定です。
廃止予定また可能この機能は、今後削除される予定です。
この定義によると、バックティックはいいえ廃止予定です。
引き続きサポート:
Open Group Shell コマンド言語仕様、特にセクションへの参照2.6.3 コマンドの置換、仕様の範囲内で、バックティック(`..cmd..`
)またはドル括弧()の2つの形式のコマンド置換がまだサポートされていることがわかります。$(..cmd..)
コマンド置換を使用すると、コマンド名自体をコマンドの出力に置き換えることができます。コマンド置換は、コマンドに次のものが含まれている場合に発生します。
$(command)
または(バックティックバージョン):
`command`
$()
シェルはサブシェル環境(シェル実行環境を参照)でコマンドを実行し、コマンド置換(引用符または逆引用符付きのコマンドテキスト)をコマンドの標準出力に置き換えてコマンド置換を拡張する必要があります。シーケンス置換。改行>文字。出力が終わる前に挿入された<newline>文字は削除しないでください。ただし、IFS値と有効な引用符に応じてフィールド区切り文字として扱われ、フィールド分割中に削除される可能性があります。出力に null バイトが含まれている場合、動作は指定されません。バックティックスタイルのコマンド置換では<バックスラッシュ>
`
"$"、" "、または""が後に来ない限り、文字通りの意味を維持する必要があります。<バックスラッシュ>。一致する逆引用符検索は、この検索中に引用されず、エスケープされていない最初の逆引用符で満たされます。エスケープされ$(command)
ていない逆引用符に対して未定義の結果が発生します。シーケンスで始まるが終わらない一重引用符または二重引用符文字列は、`...`
未定義の結果を生成します。この
$(command)
形式では、左角かっこの後から一致する右角かっこまでのすべての文字がコマンドを構成します。指定されていない結果を生成するリダイレクトのみを含むスクリプトを除いて、すべての有効なシェルスクリプトをコマンドと共に使用できます。
それでは、なぜ誰もがバックティックが使用されなくなったと言うのでしょうか?
ほとんどのユースケースのためしなければならないバックティックの代わりにドル括弧形式を使用してください。 (上記の最初の意味では使用されなくなりました。)最も評判の高いサイト(U&Lを含む)でもこの内容によく言及するので、これは健全なアドバイスです。この推奨事項は、シェルからバックティックサポートを削除する予定の存在しない計画と混同しないでください。
BashFAQ#082 - $(...)が `...`(バックティック)よりも優れているのはなぜですか?
`...`
最も古い非POSIX準拠のBourne-Shellにのみ必要なレガシー構文。常に構文を優先するにはいくつかの理由があります$(...)
。...
Bash Hackers Wiki - 廃止予定と廃止予定の構文
これはBourneの以前の互換フォーマットです。コマンドの置き換え。
`COMMANDS`
と構文はすべて$(COMMANDS)
POSIXで指定されていますが、後者は非常に好まれるが、残念ながら、前者はまだスクリプトで非常に一般的です。すべての最新のシェル(およびその他の一部)は、新しいスタイルのコマンド置換を広く実装しています。バックティックを使用する唯一の理由は、実際のBourneシェル(Heirloomなど)との互換性によるものです。 Backtickコマンドの置き換えには、入れ子に特別なエスケープが必要であり、実際に見つかった例はしばしば誤って引用されます。望むより: $(...)が `...`(バックティック)よりも優れているのはなぜですか?。-
この一貫性のない動作により、コマンド置換を入れ子にしたり、複雑なスクリプトを含めようとする新しいアプリケーションでは、バックティックコマンドの置き換えはお勧めできません。
メモ:3番目の抜粋(上記)では、バックティックはまったく機能しませんが、次の段落から始めて、最新のドル角括弧アプローチが機能するいくつかの状況を示しています。
また、バックティック構文には、含まれるコマンドの内容に対する歴史的な制限があります。最新の「$()」フォームはすべての種類の有効な組み込みスクリプトを処理できますが、バックティックフォームはバックティックを含む一部の有効なスクリプトを処理できません。
そのセクションを読み続けると、失敗は強調表示され、バックティックの使用が失敗した方法を示していますが、最新のドル角括弧表記を使用すると機能します。
結論として
したがって、バックティックの代わりにドル括弧を使用する方が良いですが、実際には、「これはどの計画時点でも完全には機能しません」など、技術的に「廃止予定」の項目を使用しません。
これらすべてを読んだ後は、ドル括弧を使用することが非常に推奨されることを理解する必要があります。具体的にPOSIXではなく、実際のBourneシェルとの互換性が必要です。