以下はシェルスクリプトの断片です:
KVS_VARIABLES=$(awk -F= '!($1 && $2 && NF==2) { print "File failed validation on line " NR | "cat 1>&2"; next } { print $1, $2 }' $ENV_FILE_LOCATION)
echo ${KVS_VARIABLES}
for kv in ${KVS_VARIABLES}
do
echo $kv
key=$(echo $kv | awk -FS=" " '{print $1}')
value=$(echo $kv | awk -FS=" " '{print $2}')
echo "key: $key | value: $value"
done
私の予想結果は次のとおりです。
key: VAR1 | value: VAL1
...
しかし、私が得るものは次のとおりです。
VAR1 VAL1 VAR2 VAL2 VAR3 VAL3
VAR1
key: VAR1 | value:
VAL1
key: VAL1 | value:
VAR2
key: VAR2 | value:
VAL2
key: VAL2 | value:
VAR3
key: VAR3 | value:
VAL3
key: VAL3 | value:
編集する
$ echo "$KVS_VARIABLES" ->
VAR1 VAL1
VAR2 VAL2
VAR3 VAL3
ベストアンサー1
指定する必要があります。IFSas newline
、デフォルトでは入力ファイル区切り文字(IFS)
スペースが含まれているため、forループは次のように動作します。
KVS_VARIABLES=$(awk -F= '!($1 && $2 && NF==2) { print "File failed validation on line " NR | "cat 1>&2"; next } { print $1, $2 }' $ENV_FILE_LOCATION)
echo ${KVS_VARIABLES}
IFS=$(echo -en "\n\b")
for kv in ${KVS_VARIABLES}
do
echo $kv
key=$(echo $kv | awk '{print $1}')
value=$(echo $kv | awk '{print $2}')
echo "key: $key | value: $value"
done