![쉘 독립적인 방식으로 문자열의 "\t"를 탭 문자로 바꾸려면 어떻게 해야 합니까? [복사]](https://linux55.com/image/193189/%EC%89%98%20%EB%8F%85%EB%A6%BD%EC%A0%81%EC%9D%B8%20%EB%B0%A9%EC%8B%9D%EC%9C%BC%EB%A1%9C%20%EB%AC%B8%EC%9E%90%EC%97%B4%EC%9D%98%20%22%5Ct%22%EB%A5%BC%20%ED%83%AD%20%EB%AC%B8%EC%9E%90%EB%A1%9C%20%EB%B0%94%EA%BE%B8%EB%A0%A4%EB%A9%B4%20%EC%96%B4%EB%96%BB%EA%B2%8C%20%ED%95%B4%EC%95%BC%20%ED%95%A9%EB%8B%88%EA%B9%8C%3F%20%5B%EB%B3%B5%EC%82%AC%5D.png)
Debian Linux에서 sh와 bash에 의해 실행될 스크립트가 있습니다.
sh
다음 echo 명령은 3개의 공백을 대체하여 호출할 때 완벽하게 실행됩니다\t
. 그러나 사용시에는 실패했습니다#!/bin/bash
.
산출#/bin/sh echo "Hello\tworld"
Hello world
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$