「非推奨」には2つの異なる意味があります。
非推奨:(主にソフトウェア機能の)使用可能であるが、一般的に取って代わられたために、時代遅れであり、回避が最も良いと見なされている。
—新しいオックスフォードアメリカ辞書
この定義により、バックティックは非推奨になりました。
非推奨ステータスは、機能が将来削除されることを示す場合もあります。
— ウィキペディア
この定義により、バックティックは非推奨ではありません。
引き続きサポート:
シェルコマンド言語のオープングループ仕様、特にセクション「2.6.3コマンド置換」を引用すると、仕様が進む限り、コマンド置換の両方の形式のバックティック(`..cmd..`
)またはドル記号($(..cmd..)
)が引き続きサポートされていることがわかります。
抜粋
コマンド置換を使用すると、コマンド名自体の代わりにコマンドの出力を置換できます。コマンド置換は、コマンドが次のように囲まれている場合に発生します。
$(command)
or (backquoted version):
`command`
シェルは、サブシェル環境(シェル実行環境を参照)でコマンドを実行し、コマンド置換(コマンドのテキストと囲み文字$()
または逆引用符)をコマンドの標準出力で置き換え、1つ以上のシーケンスを削除することにより、コマンド置換を拡張します。置換の最後にある<newline>文字。出力の最後の前に埋め込まれた<newline>文字は削除されません。ただし、有効なIFSおよび引用符の値に応じて、フィールド区切り文字として扱われ、フィールド分割中に削除される場合があります。出力にヌルバイトが含まれる場合、動作は指定されません。
コマンド置換の逆引用符スタイル内で、<backslash>は、その後に続く場合を除き、リテラルの意味を保持します: '$'、 ' \`
'、または<backslash>。一致するバッククォートの検索は、最初のクォートされていないエスケープされていないバッククォートによって満たされます。この検索中に、シェルコメント、ヒアドキュメント、$(command)
フォームの埋め込みコマンド置換、または引用符付き文字列内でエスケープされていない逆引用符が検出されると、未定義の結果が発生します。「`...`
」シーケンス内で始まるが終了しない単一引用符または二重引用符で囲まれた文字列は、未定義の結果を生成します。
この$(command)
フォームでは、開き括弧から対応する閉じ括弧までのすべての文字がコマンドを構成します。任意の有効なシェルスクリプトをコマンドに使用できますが、不特定の結果を生成するリダイレクトのみで構成されるスクリプトを除きます。
それでは、なぜバックティックが廃止されたとみんなが言うのでしょうか?
ユースケースのほとんどは、バックティックの代わりにドル記号を使用する必要があるためです。(上記の第1の意味で非推奨。)最も評判の高いサイト(U&Lを含む)の多くは、これもよく一貫して述べているため、適切なアドバイスです。このアドバイスを、シェルからバックティックのサポートを削除する存在しない計画と混同しないでください。
注:この3番目の抜粋(上記)は、バックティックが単に機能しない状況を示していますが、次の段落から始まる新しいドル記号の方法は機能します。
また、逆引用符で囲まれた構文には、埋め込みコマンドの内容に関する歴史的な制限があります。新しい「$()」フォームはあらゆる種類の有効な埋め込みスクリプトを処理できますが、逆引用符付きフォームは逆引用符を含む有効なスクリプトを処理できません。
そのセクションを読み続けると、バックティックを使用してどのように失敗するかを示す失敗が強調表示されますが、新しいドル記号表記を使用して動作します。
結論
したがって、バックティックの代わりにドル記号を使用することをお勧めしますが、「これは計画された時点で完全に機能しなくなります」のように技術的に「非推奨」になっているものは使用していません。
これをすべて読んだ後、実際のオリジナルの非POSIX Bourneシェルとの互換性を特に必要としない限り、ドル記号を使用することを強くお勧めします。
cd
がディレクトリに役立つかを参照してください$(...)
。