달러 기호를 에코하는 방법은 무엇입니까?


67

예를 들어, $PATH$HOME

내가 입력 echo $PATH하면 my 반환 $PATH하지만 $PATH실제 변수가 의미 하는 단어 가 아닌 단어를 에코하고 싶습니다 echo "$PATH".


예 :와 같이 작은 따옴표를 사용하십시오 echo '$PATH'. 인용에 대한 자세한 내용은 방문
디야

@don은 serverfault에서만 속임수를 보았습니다. 내 잘못이야.
geedoubleya


@ StéphaneChazelas 그 질문은이 질문보다 거의 2 년이 더 걸렸습니다.
표시 이름

@DisplayName, 예, 그러나 "특수 문자 X를 표시하는 방법"을 모두 다루는 "정식"질문으로 사용됩니다. (나는 특정 질문을 마감하는 데 사용되는 "정식"엄밀한 답변에 대한 아이디어가 마음에 들지 않는다.
Stéphane Chazelas

답변:


77

당신은 달러를 탈출해야합니다 $. :

echo \$PATH
$PATH

또는 작은 따옴표로 묶으십시오.

echo '$PATH'
$PATH

이렇게하면 단어가 쉘에서 해석되지 않습니다.


1
고맙습니다, echo -e맨 페이지에 대해 아무 말도하지 않았습니다 .
DisplayName

-e플래그는, 예를 들어, 확장하는 데 사용되는 \t리터럴 탭 문자로. 매개 변수 확장을 방지하기 위해 달러 기호를 이스케이프 처리하는 것과 관련이 없습니다.
chepner

2
파일을 지시 할 때는 작동하지 않습니다. echo '\$PATH' >> output.txt"/ usr / local / bin : / usr / sbin : / usr / bin : / sbin : / bin : / usr / games : / usr / local / games : / opt / vc / bin"이 파일에 기록됩니다. "$ PATH"가 아닙니다.
Cerin

2
작은 따옴표와 이스케이프 문자를 사용하는 경우 \ $ PATH 만 에코해야합니다. 귀하의 에코 컴앤은 어떤 OS / 패키지를 제공합니까?
geedoubleya

@ Cerin 당신을 위해 @ stéphane 답변이 작동 echo '\044*' > first.txt했습니다. first.txt에 $ *를 출력합니다.
maq

20

$대부분의 쉘 구문에서 매우 특별한 문자입니다. Bourne과 같은 쉘만 살펴보면 다음을 소개하는 데 사용됩니다.

  1. 마찬가지로 매개 변수 확장 $#, $var,${foo:-bar}
  2. 에서와 같은 명령 대체 $(logname)( ${ logname;}서브 쉘을 피하기 위해 일부 쉘 에서도 )
  3. 에서와 같이 산술 확장 $((1+1))( $[1+1]일부 쉘에서도).
  4. $'\n'또는 같은 쉘에서 다른 형태의 인용 $"localized string".

마지막 경우를 제외하고, 그 확장은 / 대체 여전히 큰 따옴표 내부에서 발생하는 (내부 $"..."bash또는 ksh93)

이를 $특별하게 취급 하지 않으려면 다음 중 하나로 인용해야합니다.

  • 작은 따옴표 : echo '$PATH'또는 echo '$'PATH. 대부분의 쉘에서 모든 문자 (자체 제외)를 이스케이프하므로 일반적으로 사용하려는 문자입니다.
  • 블랙 슬래시 : echo \$PATH. 또한 큰 따옴표 안에 :echo "\$PATH"
  • 일부 쉘에서는 다른 인용 연산자 : echo $'$PATH', echo $'\44PATH'(ASCII 호환 문자 세트를 가정),echo $'\u0024'

또는 위에 나열된 유효한 확장 형식의 일부가 아닌지 확인하십시오.

  • echo "$"PATH
  • echo $""PATH,echo $"PATH" . 일부 쉘 은 따옴표 형태를 좋아 ksh93하고 bash지원 하기 때문에 피해야 $"..."합니다.
  • echo $``PATH. 그것이 가능하다는 것을 보여주는 것을 제외하고 그 이유를 사용하고 싶은 이유는 없습니다.
  • echo "${$+$}PATH" 다른 복잡한 것들 ...

또는 $다른 방법으로 출력 할 수 있습니다 .

  • 유닉스 호환 echo: echo '\044PATH'(일부 다른 echo필요 echo -e '\044PATH')
  • printf '\44PATH\n'
  • 고양이 << \ EOF
    $ PATH
    EOF

이러한 백 슬래시는 어떻게 쉘에 특별하기 때문에 어떻게 인용되어야하는지 주목하십시오.

할 수있는 방법이 많지만 echo '$PATH'여기 이외의 다른 것을 사용하고 싶은 좋은 이유는 없다는 점이 분명해졌습니다 .


1

큰 따옴표 안에 리터럴 $가 문제가 될 수 있습니다. 다음과 같이 큰 따옴표 외부에서 $를 생성하여 수행 할 수 있습니다.

echo "My terminal is $term, first file found in /dev is </dev/`ls /dev | head -n 1`>, the
dollar symbol is '"`echo '$'`"', and a newspaper costs "`echo '$'`"2.50."

or like this:

echo "$term is the value of "'$term'

산출:

My terminal is xterm, first file found in /dev is </dev/acpi>, the dollar symbol
is '$', and a newspaper costs $2.50.

xterm is the value of $term

또는 echo "$term is the value of \$term"다른 답변에서 이미 설명한 바와 같이. 또는 printf '%s is the value of $term\n' "$term"어쨌든 echo임의의 데이터에 사용해서는 안됩니다 .
Stéphane Chazelas

-2

사용하다:

echo ''\$PATH'' >> output.txt 

작동합니다.


2
다운 투표 할 때 의견을 추가하십시오
andreas-h

2
또는ec""h'''o''' ''""''\$P''A""TH''
Stéphane Chazelas

이 답변이 무엇을 시도하고 있는지 잘 모르겠습니다. 대답은 \ $ 또는 작은 따옴표를 사용하는 것입니다. echo '$ PATH'는 $ PATH를 출력합니다 echo '\ $ PATH'는 \ $ PATH를 출력합니다 echo "\ $ PATH"는 $ PATH를 출력합니다 echo ''\ $ PATH ''는 기술적으로 올바른 일을하지만 두 개의 null 문자열 목적이 없다.
bobpaul
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.