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$