我有两个包含一组字符串的变量。我需要将这些变量的结果连接起来并排显示。
变量a
有:
t
t
t
变量b
有:
xyz
pqr
stu
我需要得到输出
txyz
tpqr
tstu
答案1
在 bash 中,你可以使用进程替换来执行此操作paste
:
$ a='t
t
t'
$ b='xyz
pqr
stu'
$ paste <(echo "$a") <(echo "$b") -d ''
txyz
tpqr
tstu
如果您想要的只是t
在 或 的行前加上前缀b
,awk
则sed
可以这样做:
$ printf "%s" "$b" | awk '{printf "t"}1'
txyz
tpqr
tstu
答案2
使用paste
过程替换:
paste -d '' <(echo "$a") <(echo "$b")
<()
是进程替换模式,里面命令的输出将被文件描述符替换,这是需要的,因为paste
需要将文件作为输入d ''
根据需要将分隔符设置为空
例子:
$ echo "$a"
t
t
t
$ echo "$b"
xyz
pqr
stu
$ paste -d '' <(echo "$a") <(echo "$b")
txyz
tpqr
tstu
答案3
我不确定它的效率如何,但一个可能的纯 bash 解决方案可能是
while IFS= read -r -u3 x; IFS= read -r -u4 y; do
printf '%s%s\n' "$x" "$y";
done 3<<<"$a" 4<<<"$b"
答案4
如果你真正想要的只是以 开头的 3 个单词t
,你可以这样做:
$ echo $VAR_2 | awk '{print "t"$0}'
txyz
tpqr
tstu
或这个:
$ echo $VAR_2 | sed 's/^/t/g'
txyz
tpqr
tstu
如果变量中有多个(不同的)单词,它们就不太适合同时处理,因此我建议使用array
而不是变量。
$ array1=( 't' 't' 't' )
$ array2=('xyz' 'pqr' 'stu' )
$ for i in $(seq 0 2) ; do echo "${array1[$i]}""${array2[$i]}" ; done
txyz
tpqr
tstu