如何解决如何在Shell脚本中的变量中存储的每个单词周围添加引号
我有一个变量foo。
echo“ print foo”“ $ foo” ---> abc,bc,cde
我想在每个变量周围加上引号。
预期结果= 'abc','bc','cde'
。
我已经尝试过这种方法,但是没有用:
join_lines() {
local IFS=${1:-,}
set --
while IFS= read -r line; do set -- "$@" "$'line'"; done
echo "$*"
}
解决方法
请您尝试按照GNU awk
中显示的示例进行严格的书面测试并对其进行测试。
无循环:
var="abc,bc,cde"
echo "$var" | awk -v s1="'" 'BEGIN{FS=",";OFS="\047,\047"} {$1=$1;$0=s1 $0 s1} 1'
使用循环通常的方式遍历所有字段(逗号分隔):
var="abc,cde"
echo "$var" | awk -v s1="'" 'BEGIN{FS=OFS=","} {for(i=1;i<=NF;i++){$i=s1 $i s1}} 1'
输出将为'abc','bc','cde'
。
或者,使用'sed : replacing every
'with
''
,并在行的开头和结尾添加'
以包装第一个/最后一个令牌。
sed -e "s/^/'/" -e "s/$/'/" -e "s/,/','/g"
,
从表面上看,问题在于如何将逗号分隔的值列表(存储在shell变量中)转换为逗号分隔的带引号的标记列表。扩展OP提供的逻辑,但使用shell数组
foo="abc,cde"
IFS=,read -a items <<< "$foo"
result=
for r in "${items[@]}" ; do
[ "$result" ] && result+=","
result+="'$r'"
done
echo "RESULT=$result"
如果需要,可以将逻辑放入函数/过滤器
function join_lines {
local -a items
local input result
while IFS=,read -a items ; do
result=
for r in "${items[@]}" ; do
[ "$result" ] && result+=","
result+="'$r'"
done
echo "$result"
done
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。