Linux bash での IFS 文字列の分割と一重引用符のエスケープに関する多くの質問への回答がありますが、2 つのトピックを結合するものは見つかりませんでした。問題に遭遇すると、以下のようなコードで(私にとって)奇妙な動作が発生しました。
(bash スクリプト ブロック)
theString="a string with some 'single' quotes in it"
old_IFS=$IFS
IFS=\'
read -a stringTokens <<< "$theString"
IFS=$old_IFS
for token in ${stringTokens[@]}
do
echo $token
done
# let's say $i holds the piece of string between quotes
echo ${stringTokens[$i]}
何が起こるかというと、配列のecho要素には実際に必要な部分文字列が含まれているため (したがって、\' IFS が正しいと思われます)、forループはスペースで分割された文字列を返します。
同じ配列 (または私の考えでは同じ配列のように見えるもの) がこのように動作する理由を誰かが理解するのを親切に手伝ってくれますか?