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"
}

마지막으로 두 번째 것은 없습니다 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"

관련 정보