Quoting : Resumindo, as variáveis não são substituídas por seus valores dentro de 'single-quoted'
strings (aka. " substituição variável "). Você precisa usar qualquer um dos "double quotes"
, $'dollar quotes'
ou
<<EOF
here strings
EOF
Eu tenho este código que funciona:
get_parameter ()
{
echo "$query" | sed -n 's/^.*name=\([^&]*\).*$//p' | sed "s/%20/ /g"
}
Mas eu quero substituir o "nome" pelo parâmetro que eu passo para get_parameter
get_parameter ()
{
echo "$query" | sed -n 's/^.*$1=\([^&]*\).*$//p' | sed "s/%20/ /g"
}
NAME=$( get_parameter name )
Isso, no entanto, não funciona. Onde estou errado?
Quoting : Resumindo, as variáveis não são substituídas por seus valores dentro de 'single-quoted'
strings (aka. " substituição variável "). Você precisa usar qualquer um dos "double quotes"
, $'dollar quotes'
ou
<<EOF
here strings
EOF
Como l0b0 apontou , você não pode usar aspas simples aqui. Além disso, no seu exemplo, você não precisa usar sed
. Parece muito mais limpo com grep
:
get_parameter ()
{
echo "$query" | grep -o "${1}=[^&]*" | sed "s/%20/ /g"
}
Sem echo
:
get_parameter ()
{
<<< "$query" grep -o "${1}=[^&]*" | sed "s/%20/ /g"
}
E, finalmente, sem o segundo sed
(apenas bash
):
get_parameter ()
{
<<< "${query//%20/ }" grep -o "${1}=[^&]*"
}
mudança:
echo "$query" | sed -n 's/^.*$1=\([^&]*\).*$//p' | sed "s/%20/ /g"
para:
echo "$query" | sed -n 's/^.*'"$1"'=\([^&]*\).*$//p' | sed "s/%20/ /g"