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

时间:2018-09-11 21:54:41

标签: linux bash shell unix scripting

我正在寻找选项以读取具有逗号分隔字段(例如: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

2 个答案:

答案 0 :(得分: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'

答案 1 :(得分: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在每个逗号,之间包含多个字符,则上述操作不起作用。为此,请为-E的{​​{1}}或regex选项

sed