sed s 명령 & e 플래그: `echo '$-' | sed 's/-//e'`는 다음을 제공합니다: `sh: $: 명령을 찾을 수 없음`

sed s 명령 & e 플래그: `echo '$-' | sed 's/-//e'`는 다음을 제공합니다: `sh: $: 명령을 찾을 수 없음`

질문이 있어요sed, 그것을 사용할 때에스'(검색 및 바꾸기 명령) 및 '이자형' 플래그(예:

sed 's/.../.../e'

문제는 표준 입력의 문자 $, 및 (가 혼동되는 것 같다는 것입니다.)


나의 첫 만남여기이제 다음과 같이 요약됩니다.

echo '$-' | sed 's/x//e'               # works when pattern is NOT matched
$-

echo '$-' | sed 's/-//e'               # fails when pattern is matched: gags on $
sh: $: command not found

echo '-' | sed 's/-//e'                # works when $ isn't present

echo '-(' | sed 's/-//e'               # Also fails when '(' or ')' are found
sh: -c: line 1: syntax error: unexpected end of file

echo '(' | sed 's/-//e'                # But works with this
(

echo '$-' | sed 's/-/echo xx/e'        # also fails
sh: xx: command not found

echo '$-' | sed 's/\(-\)/echo '\1'/e'  # also fails
sh: 1: command not found

이게 뭐야?GNU 매뉴얼설명하다:

3.3초 명령

...

s 명령 뒤에는 다음 플래그 중 0개 이상이 올 수 있습니다.

...

이자형

이 명령을 사용하면 쉘 명령의 입력을 패턴 공간으로 파이프할 수 있습니다. 대체가 이루어지면 패턴 공간에 있는 명령이 실행되고 해당 출력이 패턴 공간을 대체합니다. 후행 줄 바꿈은 억제됩니다. 실행할 명령에 NUL 문자가 포함되어 있으면 결과가 정의되지 않습니다. 이것은 GNU sed 확장입니다.


bash --version
GNU bash, version 5.0.3(1)-release (x86_64-pc-linux-gnu)

sed --version
sed (GNU sed) 4.7
Packaged by Debian

내가 무엇을 놓쳤거나 잘못했나요?

답변1

달리기

echo '$-' | sed 's/-//e'

-에서 제거 $-하고 그대로 두면 $결과는 셸 명령으로 실행됩니다 /e.

$명령줄에서 실행해 보면 결과는 동일합니다.

sh: $: command not found

다른 모든 라인도 비슷합니다.

관련 정보