텍스트 "-n"을 에코하는 방법

텍스트 "-n"을 에코하는 방법

-n쉘에 내장된 명령만 사용하여 echo두 문자 문자열을 에코하는 것이 가능합니까 bash?

나는 이것을 할 수 있다는 것을 알고 있지만 내장된 기능이 문자열을 출력할 수 있는지 printf '%s\n' -n알고 싶었습니다 .echo-n

답변1

-e8진수 55를 사용한다는 것은 다음을 의미합니다 -.

$ echo -e '\055n'
-n

...또는 8진수로 156 n또는 8진수로 둘 다:

$ echo -e '\055\0156'
-n

이것이 -e귀찮 다면 항상 백슬래시 시퀀스를 해석 xpg_echo하도록 쉘 옵션을 설정하십시오 echo(그러나 이는 일반적으로 원하는 것이 아닙니다).

$ shopt -s xpg_echo
$ echo '-\0156'
-n

in은 16진수 echobash인식합니다.

$ echo -e '\x2d\x6e'
-n

답변2

모든 답변에 감사드립니다. 방금 생각난 것 하나를 추가하겠습니다.

echo -n -;echo n

답변3

" " -n앞에 문자를 배치하고 \b모드에서 " " 이스케이프 시퀀스를 사용하여 -e최종 출력에서 ​​문자를 제거합니다. 다음 예에서는 공백을 더미 문자로 사용합니다.

$ echo -e " \b-n"
-n

설명하다:

$ man echo
       If -e is in effect, the following sequences are recognized:
       \b     backspace

그러면 출력이 터미널에 시각적으로 인쇄됩니다.

$ echo -e " \b-n" | tee /tmp/test
-n
$ cat /tmp/test
-n

그러나 출력을 구문 분석해야 하는 경우 보이지 않는 백스페이스 문자가 생성되므로 문제가 발생할 수 있습니다.

$ echo -e " \b-n" | wc -c
5
$ wc -c <<< $(echo -e " \b-n")
5
$ echo -e "--" | wc -c
3

관련 정보