답변:
echo -e ' \t '
'space tab space newline'을 에코합니다 ( ' -e
백 슬래시 이스케이프 해석 가능'을 의미합니다).
$ echo -e ' \t ' | hexdump -C
00000000 20 09 20 0a | . .|
echo -e
Makefile에서 작동하지 않는지 알고 있습니까?
echo -e
POSIX가 아니기 때문에 일반적으로 프로그램에서 사용하지 않는 make
호출 /bin/sh
은 대화식으로 사용되며 일반적으로 -e
구현 되지 않았습니다 . 이식성을 위해 printf '\t'
대신 사용하십시오.
man
에서 echo
명령 페이지 에는 옵션이 언급되어 있지 않습니다 -e
. 그러나이 옵션은 허용됩니다.
사용 printf
하지 말고 사용하십시오 echo
.
여러 버전의 echo
명령이 있습니다. 있다 /bin/echo
(이 수도 있고 시스템에 따라 GNU로 coreutils 버전이 아닐 수도있다), 그리고 echo
명령은 대부분 껍질에 내장되어 있습니다. 버전마다 제어 문자의 이스케이프를 지정하거나 비활성화하는 방법이 다릅니다 (또는 방법이 없습니다).
printf
반면에 변형은 훨씬 적습니다. 일반적으로 명령으로 존재할 수 있으며 /bin/printf
일부 쉘에 내장되어 있지만 (bash 및 zsh에는 tcsh 및 ksh에는 없습니다) 다양한 버전은 서로 다른 버전보다 서로 훨씬 유사합니다 echo
. 그리고 당신은 명령 줄 옵션을 기억할 필요가 없습니다 (몇 가지 예외를 제외하고, GNU로 coreutils의 printf는 허용 --version
하고 --help
, 그리고 내장의 bash의 printf 받아 -v var
변수에 출력을 저장하기 위해).
예를 들어 :
res=' 'x # res = "\t\tx"
printf '%s\n' "[$res]"
그리고 이제 echo
여러분이 요구하는 예제에서도 잘 작동 한다는 것을 인정할 때 입니다. 인수에 큰 따옴표를 넣으면됩니다.
echo "[$res]"
kmkaplan이 쓴 것처럼 (2 년 반 전에 방금 주목했습니다!). 원래 명령의 문제점 :
res=' 'x # res = "\t\tx"
echo '['$res']' # expect [\t\tx]
와 함께하지 않습니다 echo
; 그것은 껍질이 탭을 전에 echo
본 공간으로 교체 했기 때문입니다.
echo
와 같은 간단한 출력에는 적합 echo hello world
하지만 printf
더 복잡한 것을 원할 때마다 사용해야합니다 . 당신은 할 수 얻을 echo
작업에 있지만 결과 코드는 다른 그것을 실행하면 실패 할 가능성이 echo
구현하거나 다른 쉘.
시도해 볼 수도 있습니다 :
echo Hello$'\t'world.
는 그대로 키 사용 ^V
( CTRL+V
, C-v
, 무엇이든 ).
당신이 입력 할 때 ^V
터미널 (또는 대부분의 유닉스 편집기에서)에 다음과 같은 문자가 취해진 다 그대로 . 이것을 사용하여 에코하는 문자열 안에 리터럴 탭 문자를 입력 할 수 있습니다.
다음과 같은 것이 작동합니다.
echo "^V<tab>" # CTRL+V, TAB
배쉬 문서 ( qv , "quoted-insert")
quoted-insert (Cq, Cv) 입력 한 다음 문자를 그대로 사용하십시오. 예를 들어 Cq와 같은 키 시퀀스를 삽입하는 방법입니다.
참고 사항 : 이것에 따르면 ALT+TAB
똑같은 일을해야하지만 우리는 시퀀스를 창 전환에 바인딩하여 사용할 수 없습니다
탭 삽입 (M-TAB) 탭 문자를 삽입하십시오.
-
참고 :이 전략을 모든 종류의 특이한 문자와 함께 사용할 수 있습니다. 캐리지 리턴과 같이 :
echo "^V^M" # CTRL+V, CTRL+M
캐리지 리턴은 ASCII 13이고 M 은 알파벳의 13 번째 문자이므로을 입력 ^M
하면 13 번째 ASCII 문자를 얻게됩니다. ls^M
빈 프롬프트 에서을 사용하여 작동 상태를 확인할 수 있으며 캐리지 리턴이 삽입되어 리턴을 누르는 것처럼 프롬프트가 작동합니다. 이러한 문자는 일반적으로 해석하는 경우, 그대로 당신이 리터럴 문자를 얻을 가져옵니다.
grep
포함 된 줄을 잡는 데 사용할 때 하루를 절약했습니다 tab
.
echo를 사용하여 변수 값을 인쇄하는 것이 일반적인 Bash 함정입니다. 참조 링크 :