我有这个有效的代码:
get_parameter ()
{
echo "$query" | sed -n 's/^.*name=\([^&]*\).*$/\1/p' | sed "s/%20/ /g"
}
但我想用传递给 get_parameter 的参数替换“名称”
get_parameter ()
{
echo "$query" | sed -n 's/^.*$1=\([^&]*\).*$/\1/p' | sed "s/%20/ /g"
}
NAME=$( get_parameter name )
然而,这不起作用。我哪里错了?
答案1
作为l0b0 尖,这里不能使用单引号。除此之外,在您的示例中您不必使用sed
其中任何一个。它看起来更干净grep
:
get_parameter ()
{
echo "$query" | grep -o "${1}=[^&]*" | sed "s/%20/ /g"
}
没有echo
:
get_parameter ()
{
<<< "$query" grep -o "${1}=[^&]*" | sed "s/%20/ /g"
}
最后,没有第二个sed
(只是bash
):
get_parameter ()
{
<<< "${query//%20/ }" grep -o "${1}=[^&]*"
}
答案2
引用:简而言之,变量不会被'single-quoted'
字符串中的值替换(又名“变量替换”)。您需要使用"double quotes"
、$'dollar quotes'
或中的任何一个
<<EOF
here strings
EOF
答案3
改变:
echo "$query" | sed -n 's/^.*$1=\([^&]*\).*$/\1/p' | sed "s/%20/ /g"
到:
echo "$query" | sed -n 's/^.*'"$1"'=\([^&]*\).*$/\1/p' | sed "s/%20/ /g"
答案4
您可以通过替换将其与其余命令连接起来,如下所示name
:'$1'
sed -n 's/^.*'$1'=\([^&]*\).*$/\1/p' | sed "s/%20/ /g"