在bash中,我想将可能包含空格分隔元素的类似 PATH 的环境变量转换为array
,确保带有空格的元素不会导致分词,显示为“多个元素”。
让PATH_VARIABLE
成为有问题的变量。
令un:dodecaedro:per:tirare:per:i danni
为变量的内容。
它 适用 于所需的 array
_to6
元素,而不是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 (build 12D78)