Como passar um parâmetro de string na função bash?

3

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?

    
por michelemarcon 21.09.2011 / 11:57

3 respostas

4

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
    
por 21.09.2011 / 12:31
5

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}=[^&]*"
}
    
por 21.09.2011 / 12:59
0

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"
    
por 03.10.2011 / 14:39