古いダニと括弧の問題:混乱

古いダニと括弧の問題:混乱

数年前に修正された後、コマンド拡張のためにバックティックから$()に切り替えました。

しかし、私はまだバックティックを好む。キー入力回数が少なく、Shiftキー入力は不要です。

括弧は、バックティックで発生しやすいエラーが少ないため、より良い選択であることを理解しています。しかし、このルールを適用したのはなぜですか?いいえバックティックを使用しますか?

答え1

Bash FAQにはその理由がたくさんあります。到着好むバックティックに角かっこを使用しますが、一般的な規則はありません。してはいけないバックティックを使用してください。

私の考えにかっこを好む主な理由は、内部解析が$()外部で実行される解析と一致しますが、バックティックはそうではないからです。これは"$()"、シェルコマンドを簡単にインポートしてラップできることを意味します。代わりにバックティックを使用している場合はそうではありません。これはカスケード接続されているため、"$()"バックティックを使用するのではなく、代替アイテムを含むコマンドを簡単にラップできます。

結局、習慣の問題だと思います。単純な場合はバックティックを使用し、他の場合は括弧を使用することを選択した場合は、コマンドを変更するたびにその選択を行う必要があります。常に括弧を使用することを選択した場合は、もう一度考える必要はありません。

後者は、いくつかのコーディングガイドラインに存在する「バックティックを使用しないでください」という規則を説明できます。これは開発を簡素化し、開発者とレビュー担当者のエラー原因を排除します。また、1行のテキストに括弧を使用することが推奨される理由も説明します。どこにもかっこを適用しないと、スクリプトの習慣を養うことは困難です。

(キーイングに関する限り、これはキーボードのレイアウトによって異なります。私のAZERTYキーボードでは$()Shiftキーが関係しておらず、バックティックは書き込みが困難です。)

答え2

個人的には、ネストされた引用符と拡張の極端なケースではより一貫しているので、常にを使用し、拡張が$(...)ドル記号で一貫して始まり、括弧がバックティックよりも明確であるというアイデアが好きです。バックティック引用符は次のとおりです。非常に軽く、一部のフォントでは一重引用符と混同されることがあります。コメントで言及。しかし、最初のものを除いて、すべて外観と美学に関するものであるため、意見が異なる場合があります。

の議論に基づいて* shシェルではバックティック(「cmd」など)は使用されなくなりましたか?、バックティックのサポートは削除されないようですので、「絶対にしない」と言う理由はありません。

ただし、逆引用符の構文解析が場合によっては奇妙に機能する可能性があることに注意してください。入れ子になった拡張に逆引用符を追加するのは非常に簡単です。

echo `echo \`echo foo\` `

しかし、それはすべてではありません。ステファンが本で指摘したように回答到着 通常の文字のように特殊文字を使用する方法は?たとえば、kshで逆引用符を含む二重引用符を入れ子にしても失敗します(より簡単にアクセスできるようにここに再現します)。

ksh$ echo "`date +"%F %T"`"  
ksh: : cannot execute [Is a directory]
2020-10-01 %T

そしてそれでも、内部二重引用符をエスケープする必要があります。良いそれらがなくても構文解析はあいまいではありません。

ksh$ echo "`date +\"%F %T\"`"  
2020-10-01 14:14:27

(コマンド置換の引用符はコマンド置換に関連していますが、echoここでは関係ありません。)

したがって、これは「決して言わない」状況のように見え、バックティックは単純な場合にはうまく機能しますが、これは十分であると思います。おすすめただ代わりに使用してください$()。 :)

関連情報