bash:连接多个变量的第一个值

时间:2012-03-05 00:21:47

标签: arrays bash variables concatenation

假设我使用grep和cut来将数据存储到变量中。我需要将每个变量的第一个第二个和第三个值相互连接起来。我想我需要使用数组来实现这一目标,但我不知道如何去做。例如,如果$ 1持有b c而$ 2持有1 2 3且$ 3持有x y z我想连接以便我的输出看起来像a1x b2y c3z。就像我说我认为我需要将我的grep / cut输出存储到一个数组中,但我不知道该怎么做。感谢。

5 个答案:

答案 0 :(得分:1)

在纯粹的bash中,你可以这样做:

v1="a b c"
v2="1 2 3"
v3="x y z"
for v in v1 v2 v3; do
  read p1 p2 p3 <<< ${!v}
  a1="$a1$p1" 
  a2="$a2$p2" 
  a3="$a3$p3" 
done
echo $a1 
echo $a2 
echo $a3

最后三个回声输出:

a1x
b2y
c3z

答案 1 :(得分:0)

您可以使用sedtr等将' '翻译为'\n'
然后使用paste垂直连接它们。

$ v1="a b c"
$ v2="1 2 3"
$ v3="x y z"

$ paste <(tr ' ' '\n' <<<$v1) <(tr ' ' '\n' <<<$v2) <(tr ' ' '\n' <<<$v3) | tr -d '\t'
a1x
b2y
c3z

或者

$ paste <(echo "${v1// /$'\n'}") <(echo "${v2// /$'\n'}") <(echo "${v3// /$'\n'}") | tr -d '\t'
a1x
b2y
c3z

注意:如果将它们保存在单独的文件中,则会更容易。

答案 2 :(得分:0)

使用数组的纯bash中的另一种解决方案:

$ arr=( $v1 $v2 $v3 )

$ for ((i=0; i<3; i++)); do
    for ((j=i; j<${#arr[@]}; j+=3)); do printf '%s' ${arr[j]}; done
    echo
 done

a1x
b2y
c3z

答案 3 :(得分:0)

使用数组进行Pure bash:

declare -a a=( $v1 $v2 $v3 )

echo "${a[0]}${a[3]}${a[6]}"
echo "${a[1]}${a[4]}${a[7]}"
echo "${a[2]}${a[5]}${a[8]}"

答案 4 :(得分:0)

这可能对您有用:

v1="a b c"
v2="1 2 3"
v3="x y z"
parallel --xapply echo {1}{2}{3} ::: $v1 ::: $v2 ::: $v3
a1x
b2y
c3z