bashでは、スペースで区切られた要素を含む可能性array
のある PATHのような環境変数を に変換し、スペースを含む要素が単語分割を引き起こさず、「複数の要素」として表示されるようにしたいと考えています。
PATH_VARIABLE
問題の変数としましょう。
を変数un:dodecaedro:per:tirare:per:i danni
の内容とします。
ではなく、目的の_to要素を持つことを目的と しています。 array
6
7
0) un
1) dodecaedro
2) per
3) tirare
4) per
5) i danni
「トリッキーな」エントリは、スペースで区切られた値の場合があります: i danni
.
これを達成するための最もエレガント で正しい方法を探しています。
制限: 私のbashバージョンで動作する必要があります:v3.2.48(1)-release
Pythonでは、これは次のように美しく行われます:
>>> v='un:dodecaedro:per:tirare:per:i danni'
>>> len(v.split(':'))
6
動作します。私が探しているものを示しています。
私たちの最愛のbashでこれを行う最良の方法は何ですか?
私の試みを具体的に改善できます4
か?
ここで私の試み
#!/bin/bash
PATH_VARIABLE='un:dodecaedro:per:tirare:per:i danni'
# WRONG
a1=($(echo $PATH_VARIABLE | tr ':' '\n'))
# WRONG
a2=($(
while read path_component; do
echo "$path_component"
done < <(echo "$PATH_VARIABLE" | tr ':' '\n')
))
# WORKS, it is elegant.. but I have no bash 4!
# readarray -t a3 < <(echo "$PATH_VARIABLE" | tr ':' '\n')
# WORKS, but it looks "clunky" to me :(
i=0
while read line; do
a4[i++]=$line
done < <(echo "$PATH_VARIABLE" | tr ':' '\n')
n=${#a4[@]}
for ((i=0; i < n; i++)); do
printf '%2d) %s\n' "$i" "${a4[i]}"
done
私の環境
bash v3.2.48(1)-リリース
osx OS X v10.8.3 (ビルド 12D78)