작동하는 다음 코드가 있습니다.
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"