Bashスクリプト用のIFSの設定

Bashスクリプト用のIFSの設定

代表的な場合はですIFS= read
このトピックはこのスレッドでよく説明されています。
Bashでコマンドの前に変数を設定するのが正当な理由は何ですか?
完全な理解を助けるために、以下のスクリプトが期待どおりに機能しない理由を説明していただきありがとうございます。
my_script:

#!/bin/bash

echo "$var1"
echo -n "$IFS" | xxd -p
echo "$var2"

exit 0

呼ぶmy_script

var1=foo IFS= var2=bar my_script

出力:

foo
20090a
bar

ご覧のとおり、何IFSも変更されておらず、まだデフォルトに設定されています。に電話するときにカスタマイズを取得する
方法は?read事前にありがとうIFSIFS= read

ベストアンサー1

説明によると、IFSbashは環境からのインポートを許可しないため、サンプルはスクリプトに設定されていません。IFSvariables.c:

  /* Don't allow IFS to be imported from the environment. */
  temp_var = bind_variable ("IFS", " \t\n", 0);
  setifs (temp_var); 

組み込みコマンドと非 -スクリプトもちろん、getを使って割り当てますIFS。ただし、これは次IFSのような場合にのみ機能することを覚えておいてください。噴射:

シェルは各文字を$IFS区切り文字として扱い、これらの文字をフィールド終端として使用して、他の拡張結果を単語に分割します。設定されていIFSない場合、またはその値がデフォルト値の場合<space><tab><newline>、前の拡張結果の先頭と末尾にある、およびのシーケンスは無視され、<space>開始<tab>または終了以外の文字シーケンスは単語を区切るために使用されます。デフォルト以外の値を使用すると、空白文字が値(スペース文字)内にある限り、単語の先頭と末尾のスペースとタブのシーケンスは無視されます。 IFS 空白以外のすべての文字に隣接する空白文字は、フィールドを区別します。空白文字シーケンスも区切り文字と見なされます。値が空の場合、単語分割は発生しません。<newline>IFSIFSIFSIFSIFSIFSIFSIFS

おすすめ記事