bash関数で文字列パラメータを渡すには?

bash関数で文字列パラメータを渡すには?

動作する次のコードがあります。

get_parameter ()
{
   echo "$query" | sed -n 's/^.*name=\([^&]*\).*$/\1/p' | sed "s/%20/ /g"
}

しかし、「name」を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"
}

最後に2番目のものはありません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"

関連情報