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