쉘 : 백 티크에서 SED를 사용합니다
문제
나는 문자열 안에서 특별한 숯을 탈출하고 싶습니다. 나는 그 끈을 반향하고 일부 SED를 통해 파이프를 가야한다고 생각했다. 이것은 백 티크 내부에서 작동하지 않는 것 같습니다. 그래서 왜
echo "foo[bar]" | sed 's/\[/\\[/g'
반품
foo\[bar]
하지만
FOO=`echo "foo[bar]" | sed 's/\[/\\[/g'` && echo $FOO
그냥 돌아옵니다
foo[bar]
?
SED와 달리 TR은 백 틱 내부에서 완벽하게 작동합니다.
FOO=`echo "foo[bar]" | tr '[' '-' ` && echo $FOO
보고
foo-bar]
해결책
백 티크 사이의 백 슬래시를 피해야합니다.
FOO=`echo "foo[bar]" | sed 's/\\[/\\\\[/g'` && echo $FOO
또는 사용하십시오 $()
(이것은 실제로 권장 방법입니다).
FOO=$(echo "foo[bar]" | sed 's/\[/\\[/g') && echo $FOO
다른 팁
백 틱을 사용하지 않고 $ ()를 사용하는 것은 어떻습니까?
FOO=$(echo "foo[bar]" | sed 's/\[/\\[/g') && echo $FOO
백 티크 사용을 고집한다면, 나는 당신이 추가 탈출을 더블로 탈출해야한다고 생각합니다.
FOO=`echo "foo[bar]" | sed 's/\\[/\\\\[/g'` && echo $FOO
일반적으로, 그것은 외설적 인 경우입니다
FOO=`echo "foo[bar]" | sed 's/\[/\\\[/g'` && echo $FOO
제휴하지 않습니다 StackOverflow