쉘 독립적인 방식으로 문자열의 "\t"를 탭 문자로 바꾸려면 어떻게 해야 합니까? [복사]

쉘 독립적인 방식으로 문자열의 "\t"를 탭 문자로 바꾸려면 어떻게 해야 합니까? [복사]

Debian Linux에서 sh와 bash에 의해 실행될 스크립트가 있습니다.

  1. sh다음 echo 명령은 3개의 공백을 대체하여 호출할 때 완벽하게 실행됩니다 \t. 그러나 사용시에는 실패했습니다 #!/bin/bash.
    #/bin/sh
    echo "Hello\tworld"
    
    산출
    Hello   world
    
  2. bash다음 echo 명령은 3개의 공백을 대체하여 호출할 때 완벽하게 실행됩니다 \t. 그러나 를 사용하여 실행하면 실패합니다 #/bin/sh.
    #/bin/bash
    echo -e "Hello\tworld"
    
    산출
    Hello   world
    

sh\t 또는 bash를 동일한 명령줄로 바꿀 수 있는 방법이 있습니까 ?

답변1

탭이 변수가 아닌 리터럴에 있다고 가정

printf 'Hello\tworld\n'

문자열이 변수에 있는 경우 변수를 첫 번째 인수로 전달하지 않는 것이 가장 좋습니다 . 왜냐하면 printf변수의 백분율 기호( %) 또는 백슬래시( )를 이스케이프해야 하기 때문입니다. \가장 좋은 방법은 %b형식 지정자 로 사용하는 것입니다 printf(@Stéphane Chazelas에게 감사드립니다).

$ a='hello\tworld'
$ printf "%b\n" "$a"
hello   world
$ printf "%b\n" "$a" | cat -A
hello^Iworld$

관련 정보