シェルスクリプト:\ n直接回線分割に関する問題[閉じる]

シェルスクリプト:\ n直接回線分割に関する問題[閉じる]

以下はシェルスクリプトの断片です:

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

おすすめ記事