変数を使用しないときに、スペース以外の区切り文字を使用して単語分割を機能させる方法はありますか?

user267935

私がこのようなことをした場合:

IFS=,
x=hello,hi,world
echo $x

次に、3つの引数(helloおよびhiworldが抽出され、これらの3つの引数がに渡されechoます。

しかし、変数を使用しない場合:

IFS=,
echo hello,hi,world bye

そして、単語の分割は、スペース区切りではなく、カンマ区切り文字を使用して起こるのだろう、とに生成され、渡された2つの引数は、ようechoになりますhello,hi,worldbye

変数を使用しないときに、スペース以外の区切り文字を使用して単語分割を機能させる方法はありますか?

ilkkachu

いいえ、単語の分割は展開後にのみ発生し、コマンドラインで直接指定されたもの(つまり、最新のシェル)では発生しません。POSIXテキストには次のように書かれています。

2.6.5フィールド分割
パラメーター展開(パラメーター展開)、コマンド置換(コマンド置換)、および算術展開(算術展開)の後、シェルは、フィールド分割との二重引用符で発生しなかった展開と置換の結果をスキャンする必要があります。複数のフィールドが生じる可能性があります。

(私の強調)

そしてBash

シェルは、単語分割のために二重引用符内で発生しなかったパラメーター展開、コマンド置換、および算術展開の結果をスキャンします。

文字列がスクリプトに直接含まれている場合は、カンマをスペースに置き換えるだけでよいため、これが大きな問題かどうかはわかりません。そして、それが外部からのものである場合、分割は通常、コマンド置換で、またはreadなどを使用するときに自然に発生します


元のBourneシェルでは、動作が少し異なりました。@StéphaneChazelasは、しばらく前に別の質問への回答でこれについて説明しました。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ