下面是一个大脚本中的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
当前回答
如果你来这里是为了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
我从线人那里得到的。
还有另一种方法。如:
echo ${opt:1:-1}
在Bash中,你可以使用下面的一行代码:
[[ "${var}" == \"*\" || "${var}" == \'*\' ]] && var="${var:1:-1}"
这将从存储在var中的字符串中删除周围的引号(单引号和双引号),同时保持字符串中的引号字符完整。同样,如果只有一个前引号或只有一个后引号,或者在开始/结束处有混合引号字符,这将不起任何作用。
包装在函数中:
#!/usr/bin/env bash
# Strip surrounding quotes from string [$1: variable name]
function strip_quotes() {
local -n var="$1"
[[ "${var}" == \"*\" || "${var}" == \'*\' ]] && var="${var:1:-1}"
}
str="'hello world'"
echo "Before: ${str}"
strip_quotes str
echo "After: ${str}"
你只需要调用一次sed就可以做到:
$ echo "\"html\\test\\\"" | sed 's/^"\(.*\)"$/\1/'
html\test\
STR='"0.0.0"' ## OR STR="\"0.0.0\""
echo "${STR//\"/}"
## Output: 0.0.0