programing

bash 스크립트의 에코 탭 문자

fastcode 2023. 4. 20. 22:58
반응형

bash 스크립트의 에코 탭 문자

bash 스크립트를 사용하여 하나 이상의 탭 문자를 에코하려면 어떻게 해야 합니까?이 코드를 실행하면

res='       'x # res = "\t\tx"
echo '['$res']' # expect [\t\tx]

알겠네

res=[ x] # that is [<space>x]
echo -e ' \t '

space 탭 space newline'을 에코합니다.(-e는 '백슬래시 이스케이프 해석 활성화'를 의미합니다.

$ echo -e ' \t ' | hexdump -C
00000000  20 09 20 0a                                       | . .|

사용하다printf,것은 아니다.echo.

에는 여러 가지 버전이 있습니다.echo명령어를 입력합니다.있다/bin/echo(시스템에 따라 GNU Coreutils 버전일 수도 있고 아닐 수도 있음) 및echo명령어는 대부분의 셸에 포함되어 있습니다.버전에 따라 제어 문자의 이스케이프를 지정하거나 비활성화하는 방법이 다릅니다.

printf반면 의 변동은 훨씬 적습니다.일반적으로 명령어로 존재할 수 있습니다./bin/printf일부 셸에 내장되어 있습니다(tcsh와 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.

문자열을 큰따옴표로 묶습니다.

echo "[$res]"

에코에 -e 플래그를 사용해야 합니다.그렇게 하면

echo -e "\t\t x"

bash man 페이지에서:

$'string' 형식의 단어는 특별 취급됩니다.ANSI C 표준에서 지정한 대로 백슬래시 이스케이프 문자를 사용하여 단어가 문자열로 확장됩니다.

다음과 같이 할 수 있습니다.

echo $'hello\tworld'

글자 그대로 키 스트로크를 사용해서^V(CTRL+V,C-v, 무엇이든).

입력할 때^V(또는 대부분의 Unix 에디터에서는) 다음 문자가 문자 그대로 사용됩니다.이를 사용하여 에코할 문자열 내의 리터럴탭 문자를 입력할 수 있습니다.

다음과 같은 기능이 있습니다.

echo "^V<tab>"     # CTRL+V, TAB

Bash 문서(q.v., "quoted-insert")

quoted-insert (C-q, C-v) 입력한 다음 문자를 줄 바꿈에 추가합니다.예를 들어 C-q와 같은 키 시퀀스를 삽입하는 방법은 다음과 같습니다.

사이드 노트: 이에 따르면, ALT+TAB 같은 작업을 해야 하는데, 우리는 모두 윈도우 전환에 그 시퀀스를 묶어서 사용할 수 없습니다.

tab-insert (M-TAB) 탭 문자를 삽입합니다.

--

주의: 이 전략은 모든 종류의 특이한 캐릭터와 함께 사용할 수 있습니다.캐리지 리턴처럼:

echo "^V^M"        # CTRL+V, CTRL+M

캐리지 리턴은 ASCII 13이고 M은 알파벳의 13번째 문자이기 때문에 입력 시^MASCII 13개 '하다'를 볼 수 있어요.ls^M빈 프롬프트에서 캐리지 리턴을 삽입하여 리턴을 누르는 것과 동일하게 프롬프트가 동작합니다.이러한 문자가 통상은 해석되고 있는 경우, 문자 그대로의 문자가 표시됩니다.

에코를 사용하여 변수 값을 인쇄하는 것은 일반적인 Bash 함정입니다.참조 링크:

http://mywiki.wooledge.org/BashPitfalls#echo_.24foo

「 」를 사용하고 echo "a\tb"스크립트에서는 다음과 같이 스크립트를 실행합니다.

# sh -e myscript.sh

또는 myscript에 줄 수도 있습니다.sh 실행 권한을 지정하고 스크립트를 실행합니다.

# chmod +x myscript.sh
# ./myscript.sh
res="\t\tx"
echo -e "[${res}]"

언급URL : https://stackoverflow.com/questions/525872/echo-tab-characters-in-bash-script

반응형