방금 Linux의 쉘에 있는 명령에 대해 -e
이 플래그가 존재하지 않는 것 같습니다. echo
이것은 단지 혼란스러운 설정인가요, 아니면 "정상"인가요?
예를 들어 일부 코드는 다음과 같습니다.
#!/bin/sh
echo -e "\e[3;12r\e[3H"
인쇄:
-e \e[3;12r\e[3H
이것은 이전에 작동했습니다! stty
일부 명령에 문제가 발생하여 이제 더 이상 작동하지 않는 것 같습니다 . 누군가 내가 sh
실제로 bash
.
답변1
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.
답변2
-e
POSIX가 아님(실제로 POSIX echo는 지원이 허용되지만 일반적으로 어떤 옵션도 허용하지 않습니다. -n
참조)여기)이며 /bin/sh
시스템의 POSIX 셸인 것으로 보입니다. -e
일부 쉘에서 허용되는 확장이지만 이에 의존해서는 안 됩니다. 이식성이 없기 때문입니다. 이상적으로는 을 사용 printf
하거나 사용으로 전환하세요 echo -e
.
\e
또한 교체해야 하는 아래 설명의 경고를 참조하세요 \033
.
printf '\033[3;12r\033[3H'
답변3
type echo
언제든지 거의 모든 쉘에서 또는 를 입력하여 호출할 "에코"를 결정할 수 있습니다 which echo
. 일반적으로 쉘이 내장되어 있습니다. 따라서 어떤 "echo"가 설치되어 있고 어떤 쉘을 사용하는지에 따라 다릅니다.
답변4
무슨 이유에서 라기 보다는 zsh
사용을 권유하는 것 같습니다 .printf "blah\n"
echo -e "blah\n"