下面是一个大脚本中的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
当前回答
如果您试图删除引号,因为Makefile保留了它们,请尝试以下方法:
$(subst $\",,$(YOUR_VARIABLE))
基于另一个答案:https://stackoverflow.com/a/10430975/10452175
其他回答
你只需要调用一次sed就可以做到:
$ echo "\"html\\test\\\"" | sed 's/^"\(.*\)"$/\1/'
html\test\
这是不使用sed的最离散的方式:
x='"fish"'
printf " quotes: %s\nno quotes: %s\n" "$x" "${x//\"/}"
Or
echo $x
echo ${x//\"/}
输出:
quotes: "fish"
no quotes: fish
我从线人那里得到的。
使用tr删除“:
echo "$opt" | tr -d '"'
注意:这并没有完全回答问题,删除了所有双引号,而不仅仅是开头和结尾。请看下面的其他答案。
Linux=`cat /etc/os-release | grep "ID" | head -1 | awk -F= '{ print $2 }'`
echo $Linux
Output:
"amzn"
从变量中删除双引号的最简单方法是
Linux=`echo "$Linux" | tr -d '"'`
Linux=$(eval echo $Linux)
Linux=`echo ${Linux//\"/}`
Linux=`echo $Linux | xargs`
All提供不带双引号的输出:
echo $ Linux
amzn
更新
仅使用bash /标准Linux命令剥离字符串中的单引号和双引号的简单而优雅的答案:
BAR=$(eval echo $BAR)从BAR中删除引用。
=============================================================
根据hueybois的答案,经过反复试验,我得出了这个函数:
function stripStartAndEndQuotes {
cmd="temp=\${$1%\\\"}"
eval echo $cmd
temp="${temp#\"}"
eval echo "$1=$temp"
}
如果你不希望输出任何东西,你可以将计算结果输出到/dev/null 2>&1。
用法:
$ BAR="FOO BAR"
$ echo BAR
"FOO BAR"
$ stripStartAndEndQuotes "BAR"
$ echo BAR
FOO BAR