前提
やりたいこと
変数 var_input
に文字列が入っている。その文字列には、複数の値がカンマ区切りで記録されている。
input_var="aaa,bbb,ccc,ddd"
変数 input_var
を読み込み、カンマ区切りで第1フィールドを変数 var_a
に、第2フィールドを変数 var_b
に代入したい。
var_a="aaa" var_b="bbb"
解法
IFS=, read var_a var_b _ <<< "${input_var}"
出力
$ IFS=, read var_a var_b _ <<< "${input_var}" $ echo ${var_a} aaa $ echo ${var_b} bbb
IFS=,
で区切り文字をカンマ ,
に指定している。
<<< word
はヒアストリング (Here Strings) というbash独自の記法である。詳しくは man bash
を参照のこと。
よくある誤答
echo "${input_var}" | IFS=, read var_a var_b _
出力
$ echo "${input_var}" | IFS=, read var_a var_b _ $ echo ${var_a} $ echo ${var_b}
パイプ先はサブシェルで動作する。
var_aやvar_bのスコープはサブシェル内となるため、次の行の echo ${var_a}
では何も出力されない。