Linux의 쉘에서 명령에 플래그 -e
가 존재하지 않는 것 같습니다 echo
. 이것은 엉망인 설정입니까 아니면 “정상”입니까?
예를 들어 일부 코드 :
#!/bin/sh
echo -e "\e[3;12r\e[3H"
인쇄물:
-e \e[3;12r\e[3H
이것은 전에 작동했습니다! 일부 stty
명령이 크게 잘못되었다고 생각하여 더 이상 작동하지 않습니다. 누군가는 제 생각 sh
은 실제로 단지 bash
였습니다.
답변
당신이 사용하기 때문에 sh
,하지 bash
, 그 다음 echo
에 명령 sh
옵션이 없습니다 -e
. 에서 sh
맨 :
echo [-n] args...
Print the arguments on the standard output, separated by spaces.
Unless the -n option is present, a newline is output following the
arguments.
그리고 그것도 없습니다 \e
:
If any of the following sequences of characters is encountered
during output, the sequence is not output. Instead, the specified
action is performed:
\b A backspace character is output.
\c Subsequent output is suppressed. This is normally used at
the end of the last argument to suppress the trailing new‐
line that echo would otherwise output.
\f Output a form feed.
\n Output a newline character.
\r Output a carriage return.
\t Output a (horizontal) tab character.
\v Output a vertical tab.
\0digits
Output the character whose value is given by zero to three
octal digits. If there are zero digits, a nul character
is output.
\\ Output a backslash.
All other backslash sequences elicit undefined behaviour.
답변
-e
(사실, POSIX는 (비록 지원 허용 일반적으로 더 옵션을지지 않습니다 에코 POSIX 아닌 -n
참조) 여기 ), 그리고 /bin/sh
시스템에 POSIX 쉘 것으로 보인다. -e
일부 셸에서 허용되는 확장명이지만 의존해서는 안되며 이식성이 없습니다. 이상적으로는 printf
을 가진 쉘을 사용하거나로 전환하십시오 echo -e
.
또한 \e
아래 주석에서 주의 사항을 참조하십시오 \033
.
printf '\033[3;12r\033[3H'
답변
언제든지 거의 모든 쉘에있는 것을 참고, 당신은 “에코”를 입력하여 호출 할 알아낼 수 type echo
또는 which echo
. 일반적으로 쉘 내장입니다. 따라서 어떤 “echo”가 설치되어 있고 어떤 쉘을 사용하고 있는지에 따라 다릅니다.