bash メモ

bash のIFS を改行だけにする。

IFS=$'\n'

元に戻す。

IFS="$'\n'$'\t' "

      • -

HOGE_BIN="/bin/hoge"
HOGE_OPT="-a -c"
HOGE_DAT=(A B C)
HOGE_DAT[3]="D"

IFS_SAVE=$IFS
IFS=$'\n'
val=( $( eval "$HOGE_BIN $HOGE_OPT ${HOGE_DAT[@]}" ) )
IFS=$IFS_SAVE

      • -

フィールドセパレータを改行だけにした後は、スペースがセパレータとして扱われなくなってしまうので、
これは↓変数が展開されずに期待した動作はしない。
val=( $( $HOGE_BIN $HOGE_OPT ${HOGE_DAT[@]} ) )

従って強制的に、"eval"する必要がある。

bash の配列で。

$ dat=(a b c) 要素の一括定義
$ echo ${#dat[@]} 要素の個数
3
$ echo ${dat[@]} 要素の表示
a b c
$ declare -p dat
declare -a dat='([0]="a" [1]="b" [2]="c")'

$ dat[${#dat[@]}]=d 末尾に追加
$ echo ${#dat[@]}
4
$ declare -p dat
declare -a dat='([0]="a" [1]="b" [2]="c" [3]="d")'