下面是一个大脚本中的shell脚本片段。它从变量持有的字符串中删除引号。我正在使用sed,但它是有效的吗?如果不是,那么什么是有效的方法?
#!/bin/sh
opt="\"html\\test\\\""
temp=`echo $opt | sed 's/.\(.*\)/\1/' | sed 's/\(.*\)./\1/'`
echo $temp
下面是一个大脚本中的shell脚本片段。它从变量持有的字符串中删除引号。我正在使用sed,但它是有效的吗?如果不是,那么什么是有效的方法?
#!/bin/sh
opt="\"html\\test\\\""
temp=`echo $opt | sed 's/.\(.*\)/\1/' | sed 's/\(.*\)./\1/'`
echo $temp
当前回答
使用tr删除“:
echo "$opt" | tr -d '"'
注意:这并没有完全回答问题,删除了所有双引号,而不仅仅是开头和结尾。请看下面的其他答案。
其他回答
使用tr删除“:
echo "$opt" | tr -d '"'
注意:这并没有完全回答问题,删除了所有双引号,而不仅仅是开头和结尾。请看下面的其他答案。
Bash中最简单的解决方案:
$ s='"abc"'
$ echo $s
"abc"
$ echo "${s:1:-1}"
abc
这被称为子字符串展开(参见Gnu Bash手册并搜索${parameter:offset:length})。在这个例子中,它从s获取子字符串,从位置1开始,到最后第二个位置结束。这是因为,如果length为负值,则它将被解释为从参数末尾开始的向后运行偏移。
捷径——试试:
echo $opt | sed "s/\"//g"
它实际上从opt中删除了所有的“s(双引号)(除了开头和结尾之外,真的会有更多的双引号吗?所以这实际上是一样的事情,更简短;-))
如果你来这里是为了aws cli -query,试试这个。——输出文本
这是不使用sed的最离散的方式:
x='"fish"'
printf " quotes: %s\nno quotes: %s\n" "$x" "${x//\"/}"
Or
echo $x
echo ${x//\"/}
输出:
quotes: "fish"
no quotes: fish
我从线人那里得到的。