如何在 bash 函数中传递字符串参数?

如何在 bash 函数中传递字符串参数?

我有这个有效的代码:

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"

相关内容