如何读取逗号分隔变量并将它们附加到unix中的字符串缓冲区中

问题描述 投票:1回答:2

我正在寻找选项来读取具有逗号分隔字段的变量(例如:a,b,c,d,e,f)并从中生成另一个变量(例如:a,'a',b,'b',c,'c',d,'d',e,'e',f,'f')。我试过'FOR'循环方法,但最后添加逗号。例如:

Var1=a,b,c,d,e,f

预期产量:

Var2=a,'a',b,'b',c,'c',d,'d',e,'e',f,'f'

for i in $(echo $Var1 | sed "s/,/ /g")
do
    Var2="$i"",'""$i""',"
fi
done

我的Var2=a,'a',b,'b',c,'c',d,'d',e,'e',f,'f',以逗号结尾是否有任何好的方法来完成它而不会变得更复杂?

谢谢DMP

linux bash shell unix scripting
2个回答
0
投票

这是在sed做到这一点的方法。

$ var1="a,b,c,d,e,f,"
$ var2=$(sed -e "s/[a-z]/&,\'&\'/g" -e 's/,$//g' <<<"$var1")
$ echo $var2
a,'a',b,'b',c,'c',d,'d',e,'e',f,'f'

-e中的第一个sed重复单个字符,然后下一个-e删除结束逗号,

如果var1在每个逗号,之间有多个字符,则上述操作无效。为此,-Eregex选项为sed

$ var1='abc,192,hk3,def,HoZ,'
$ var2=$(sed -E -e "s/[a-zA-Z0-9]+/&,\'&\'/g" -e 's/,$//g' <<<"$var1")
$ echo "$var2"
abc,'abc',192,'192',hk3,'hk3',def,'def',HoZ,'HoZ'

0
投票

你将不得不以这种或那种方式处理额外的逗号。

这就是我提供的解决方案。我也使用实际数组来确保我们可以处理带空格的字符串:

#!/usr/bin/env bash

# Input variable
VAR1=a,b,c,d,e,f

# Read VAR1 into an array
IFS=',' read -r -a VAR1_ARRAY <<< ${VAR1}

VAR2=''

for EL in ${VAR1_ARRAY[@]}; do
  VAR2="${VAR2},${EL},'${EL}'"
done

# Remove a leading comma
VAR2=${VAR2:1:${#VAR2} - 1}

echo ${VAR2}

输出:

a,'a',b,'b',c,'c',d,'d',e,'e',f,'f'
© www.soinside.com 2019 - 2024. All rights reserved.