シェルスクリプト用語の拡張と置換の違い

シェルスクリプト用語の拡張と置換の違い

拡張そして置換シェルプログラミング言語と同じ文脈で互換性があるようです。たとえば、次のような文書の中にはバッシュリファレンスマニュアルバッシュハッカーウィキ「シェルパラメータ」を説明するには、「拡張」という単語を使用します。拡張'。しかし、他のいくつかの文書では、「代替」という言葉を好むようです。高度なバッシュスクリプトガイドパラメータの使用デリゲート

シェルプログラミング用語で「拡張」と「交換」の間に違いはありますか?

ベストアンサー1

置換ほぼ同義語拡張この場合、意味が重なっているからです。どちらも反対側の完全なサブカテゴリではありませんが、GNUマニュアル引用したセクションには、拡張全体の一部と見なされるいくつかの代替項目があります。

一つ拡張識別子の値を抽出します。たとえば、this=that拡張するとthisを取得しますthat。置換を伴わない拡張は、使用された値がすでに存在するため、あらかじめ決められているため、単に検索済み、これには、結合された検索/明示的な値(「算術拡張」など)が含まれます。

置換明示的な入出力操作の結果として値を生成します。たとえば、ifがthis=$(foo bar)実行され、対応する出力がキャプチャされますthis1一般に生成された値は完全に予測可能ですが、置換が発生する前に実際には存在しないため、通常の拡張で取得された値と同じではありません。foo bar生産。

代替品は2つの味で提供されます。注文するそしてプロセス、やや対称的です。

# Command substitution
foo=$(ls)
# Process substitution
wc <(ls)

最初の「コマンド」はあり、ls2番目の「プロセス」も同じです。置き換えられることは実際にはパイプの終わりと言うことができます。プロセス置換の重複リダイレクト。しかし、これは技術的にはあまりにも限られている可能性があるため、脚注に移動します。


  1. foo barこの場合、内部シェル機能である可能性があります。この場合、プロセス間IOはありません。シェル組み込み機能があると、これらの違いはあまり明確になりません。内容に関しては、入力と出力は同じです。

おすすめ記事