動作する次のコードがあります。
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"