新しい開発の代わりに「…」を使用または教える理由はありますか?


16

エラーを起こしやすいネストやエスケープの構文がより簡単で、少ないため$(...)、古い`ベースの構文よりも最新のコマンド置換構文の方が好ましいことを理解しています。

さらに、/bin/sh現代の使用のほとんどのスタイルのシェルがサポートしているよう$(…)です:

  • バッシュ
  • ash(したがってBusyBox、ほとんどの組み込みLinux)
  • ダッシュ
  • FreeBSD / bin / sh

そして、$(…)IEEE 1003.1で指定されています。

だから私は2つの非常に関連した質問があります

  • スクリプトを実行する必要がある特定の古いシステムを知らない限り、シェルスクリプトの新しい開発で `を使用する理由はありますか?
  • 書くだけでUNIXプログラミングの学生に教えない理由はありますか?他の開発者のシェルスクリプトを読んでいる場合に遭遇する可能性があり、本当に古いシステムまたは非標準で作業している場合に必要になる可能性のある古いバリアントとしてのみ$(...)議論します`何らかの理由で)?

7
いいえ、使用したり教えたりする意味はありません`...`。これは、Bourneシェルとの後方移植性のためだけにあります(BourneシェルがThomsonシェルとの後方移植性のために^(と同じ|)持っていたように)。ただし、(t)csh持っていないことに注意してください(ただし、$(...)それらを使用したり教えたりする意味はありません)。
ステファンシャゼル

2
それはグルーチョマルクスのことです `; {)
goldilocks

2
待ってください、バックティックは非推奨ですか?? 誰かがその理由を説明する標準的なリファレンスを持っていますか?(奇妙な構文文字は検索が非常に困難です。)
MathematicalOrchid

1
入力しやすい。``-2つのキーを押します; $()-shift + 4,9、shift + 0-5キーを押します。
Vi。

3
@MathematicalOrchidのstackoverflow.com/questions/9405478/...はかなり良いようです。特に追加の引用符が含まれる場合、バックティックを適切にネストすることは非常に困難です。
マイケルエクストランド

回答:


19

バックティックがよく使用されるので、この構文構造を教えることは理にかなっています。

もちろん、$()スタイルコマンドの置換は、既定のスタイル(および標準に準拠する構成)として強調する必要があります。

なぜバックティックがまだ人気があるのですか?タイピングで1文字を節約し、目にはおそらくそれほど重くないからです。


18
私は「目にあまり重くない」という特徴を特徴とはしませんが、バグ
...-jasonwryan

1
通常、単純な場合はバックスティックを使用し、複雑な場合は$()を使用します。しかし、これまで非常に多くのスクリプトがバックスティックを使用しており、卒業生はそれらを使用してスコープを設定できる必要がありました。
ペテル-モニカの復職

@jasonwryanその場合、バグは簡潔さのためではなく、arbitrary意的な問題です。つまり、バックティックの使用は目に簡単ですが、それが減価償却される理由ではありません。砂糖が定義上悪いと言っているのでない限り、私たちは何でもasmを好むべき$()です。一般的なプログラミングのパブロフのOCDの結果である可能性があります。
goldilocks

@goldilocks古い得れば、読みやすさはとにかくそんなに難しいです:バッククォートは、私の年齢でのコードで、実質的には見えません...
jasonwryan

3
例えば、フランス語のキーボードでは、`一方で、Altrg +è、(タイプに厄介な)で$()任意の修飾を必要としません。
ステファンシャゼル

5

プログラミングには使用せず、廃止されたシェルスクリプトでのバックティック置換の使用を教えることは問題ありません(これはコンセンサスのようです)。ただし、それらは本質的に悪意があるとは思いませんが、(少なくともLinuxコマンドラインの平均的なチュートリアルから判断すると)単純なスニペット/ワンライナーで頻繁に使用されており、おそらくネストされず、 '一度だけ行うつもりです。

参照コマンド置換:バッククォートやドル記号/括弧で囲まれましたか?


1

私は使用を避け$()、現実の世界で-それは移植性がありませんので、構造物を。4つのシェルをリストアップしました-それよりもはるかに多くのバリエーションがあります(1桁?)。Solaris / bin / shでスクリプトを実行してみて、どのように進むかを確認してください。

一方、古いシステムのサポートはいつ停止しますか?物事の新しい方法に決して進まないことはできますか?私はあなたがあなた自身の判断を信頼するべきだと思います、そしてあなたが古い方法に対する新しい方法の明確な利点を見ることができるなら、それのために行ってください...これはそれらの1つではありませんシェル変数の置換と混同しますが、これは別のものです)


1
POSIXは/bin/sh、準拠する必要があることを指定していません。Solaris /bin/shは確かに非常に不適合です。ただし、Solaris 9/10 / ...は公式にはPOSIXに準拠しています。これ$()は理解できない1つの構造です。しかし、理解できない、または異なる解釈をされるものがもっとたくさんあります。shによって返されるパスでそれを検索するための適合を取得するポータブルな方法getconf PATH
-maxschlepzig
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.