代表的な場合はです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
事前にありがとうIFS
IFS= read
ベストアンサー1
説明によると、IFS
bashは環境からのインポートを許可しないため、サンプルはスクリプトに設定されていません。IFS
variables.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>
IFS
IFS
IFS
IFS
IFS
IFS
IFS
IFS