2
私はstrcuturedファイルをbashの連想配列に読み込もうとしています。このファイルには、各行に人名と人物の住所が格納されています。例:bashの連想配列に空白があるキー
person1|address1
person2|address2
...
personN|addressN
私は以下のスクリプトを使用しています。
#!/bin/bash
declare -A address
while read line
do
name=`echo $line | cut -d '|' -f 1`
add=`echo $line | cut -d '|' -f 2`
address[$name]=$add
echo "$name - ${address[$name]}"
done < adresses.txt
for name in ${!address[*]}
do
echo "$name - ${address[$name]}"
done
スクリプトは正常に動作します。しかし、FORループでは、人名にスペースがある場合に問題が発生します(たとえば、「John Nobody」など)。これをどうすれば解決できますか?
declare -A array
while IFS='|' read -r name value; do
array["$name"]="$value"
done <<END
foo bar|baz
jane doe|qux
END
for key in "${!array[@]}"; do echo "$key -> ${array[$key]}"; done
# .........^............^ these quotes fix your error.
foo bar -> baz
jane doe -> qux
for
ループで"${!array[@]}"
内の引用符は、実際の要素の上にループ反復していることを意味する:あなたは「言葉」として空白で値を維持するために、より多くの引用符を使用する必要が
注 - 私は以前に違いを示してきます。http:/ /stackoverflow.com/a/12316565/7552 –