이를 수행하는 많은 방법이 있습니다. 내가 알고있는 대부분의 휴대용 둘은 sed
그리고 od
그들은 모두 POSIX이야 -.
printf '\n\r\b\t\033[01;31m' | sed -n l
그것은 같은 ... 않는 read
C 스타일 - 스타일의 탈출을.
산출
$
\r\b\t\033[01;31m$
od
좀 더 구성 가능합니다 ...
printf '\n\r\b\t\033[01;31m' |
od -v -w12 -t c -t a -A n
\n \r \b \t 033 [ 0 1 ; 3 1 m
nl cr bs ht esc [ 0 1 ; 3 1 m
이러한 옵션을 모두 알고 싶다면에서 찾을 수 man od
있지만 -t c
백 슬래시 이스케이프와 -t a
명명 된 문자 의 두 가지 이스케이프를 원한다고 지정 합니다. -w
위에 사용 된 옵션은 POSIX 지정하지 않습니다.
그리고 여기에 인수로 각 바이트의 8 진수 값을 이식 가능하게 인쇄하는 작은 쉘 함수 od
가 있습니다. 물론 다음과 같이 처리 할 수도 있습니다 -t o
.
proctal() (LC_ALL=C
for a do while [ -n "$a" ]
do printf %o\\n "'$a"
a=${a#?}; done; done)
간단합니다. 이것은 조금 더 복잡합니다. 그러나 쉘 특정 printf -q
구현이 할 수있는 일을 할 수 있어야합니다.
bsq() (set -f; export LC_ALL=C IFS=\'
for a do q=${a##*\'}; printf \'
[ -n "${a#"$q"}" ] &&
printf "%s'\''" ${a%\'*}
printf "%s'\n'''''\n" "$q"; done |
sed -n "/'''''"'/!H;1h;//!d;$!n;x;l' |
sed -e :n -e '/\\$/N;s/.\n//;tn
s/\([^\\]\\\(\\\\\)*\)\([0-9]\)/\10\3/g
s/\\\\'"''/\\\\''"'/g;s/$$//'
)
약간의 추가로 이전의 예제 문자열을 사용합니다.
bsq "$(printf '\n\r\'\''b\t\033[01;31m')"
산출
'\n\r\\'\''b\t\0033[01;31m'
약간 다릅니다. 추가 0
및 추가 \b
불쾌감 이 있음을 알 수 있습니다 . 이는 read
또는 %b
printf
인수로 쉽게 변환 할 수 있도록하기위한 것 입니다. 예를 들면 다음과 같습니다.
i=0
until [ $((i=$i+1)) -gt 5 ]
do touch "\%$i$(printf 'hey\b \t;\n\033 ')"
done #just for ugly's sake
bsq * | eval "
printf '<%b>\n' $(tr \\n \ )
" | tee /dev/fd/2 |
sed -n l
산출
<\%1he ;
>
<\%2he ;
>
<\%3he ;
>
<\%4he ;
>
<\%5he ;
>
<\\%1hey\b \t;$
\033 >$
<\\%2hey\b \t;$
\033 >$
<\\%3hey\b \t;$
\033 >$
<\\%4hey\b \t;$
\033 >$
<\\%5hey\b \t;$
\033 >$