我得到了以下代码。我想将cc dd ee ff作为数组[2]
keyvariable="aa bb cc dd ee ff"
while read -a line;
do
a=$(echo "${line[0]}")
b=$(echo "${line[1]}")
c=$(echo "${line[2]}")
done <<< "$keyvariable"
echo "$a $b $c"
当前输出:
aa bb cc
我想得到以下输出,其中aa是[0] bb是[1]而cc dd ee是[2]
aa bb cc dd ee
答案 0 :(得分:5)
您根本不需要while
循环。
您根本不想将read
与-a
开关一起使用。相反,你想要:
read -r a b c <<< "$keyvariable"
在这种情况下,read
将在空格上拆分变量keyvariable
的(第一行)扩展,但仅限于第一个和第二个字段(这些将包含在变量{{ 1}}和a
)其余部分将进入b
。如果您的字符串中有反斜杠,则使用c
开关;如果没有这个,反斜杠将被视为转义字符。
答案 1 :(得分:0)
gniourf_gniourf的答案是绝对正确的,但是如果你不知道你将有多少字段或需要根据其他一些标准选择你的“前缀”字段,然后使用数组和Substring Expansion
(
$ keyvariable="aa bb cc dd ee ff"
$ read -a line <<<"$keyvariable"
$ a=${line[0]}
$ b=${line[1]}
$ c=${line[@]:2}
$ echo "$a"
aa
$ echo "$b"
bb
$ echo "$c"
cc dd ee ff
另请注意,分配行上缺少$(echo ...)
。你不需要它。
答案 2 :(得分:-2)
只做
a=( $keyvariable )
并且您的数组a
包含您的值,因此您的示例将是
keyvariable="aa bb cc dd ee ff"
line=( $keyvariable ) # of course you can do it in the same line
a="${line[0]}"
b="${line[1]}"
n=$(( ${#line[@]} - 1))
unset line[$n]
echo "$a $b $c"