전문가https://stackoverflow.com/questions/906590/echo-version-doesnt-works버전을 알아야겠어요echo
$ type -a echo | cut -d " " -f 3- | xargs -d '\n'
a shell builtin /usr/bin/echo /bin/echo
$ /usr/bin/echo -v
-v
$ /bin/echo -v
-v
답변1
표준은 echo
어떤 옵션도 허용하지 않습니다(또는 XSI 확장의 경우 매개변수만 인식됩니다 -n
). 많은 경우 echo
내장 쉘을 사용하고 있는데, 제가 테스트한 모든 쉘에서 내장이 echo
인식되지 않았습니다 --version
. 그러나 적어도 다른 방식으로 인식했습니다 -e
. 제가 찾은 유일한 인식된 것은 많은 Linux 시스템에 설치된 GNU coreutils의 것이었습니다.-E
-n
echo
--version
/bin/echo
따라서 대부분의 경우 버전 식별 문제는 echo
실행 중인 셸 식별로 귀결됩니다. 또는 /bin/echo
현재 사용 중인 시스템이 Busybox가 아니라 GNU라는 것을 알고 있다면 를 실행하세요. 게다가 위에서 본 것처럼매뉴얼 페이지, GNU coreutils 버전만 지원됨 --version
, 지원되지 않음 -v
또는-V
.
그러나 일반적으로 말해서, 무언가를 성취하려고 한다면 특정 버전에 의존할 필요가 없고 지원되는 기능에만 의존할 필요가 있습니다. 이러한 관점 printf
에서 echo
.
문자열을 있는 그대로 인쇄하려면 다음을 사용하십시오.
printf "%s\n" "$var"
문자열에서 백슬래시 이스케이프를 처리하려면 다음을 사용하십시오.
printf "%b\n" "$var"
마지막 개행 문자를 건너뛰려면 \n
첫 번째 매개변수에서 해당 문자를 제거하세요.
바라보다왜 printf가 echo보다 나은가요? 그리고echo를 사용하여 "-e"를 인쇄하는 방법은 무엇입니까?
답변2
@ilkkachu의 답변에서 시작 :
macOS 10.15 노트북에서 이를 사용하면 zsh
다음과 같은 결과를 얻습니다.
% which echo
echo: shell built-in command
% whereis echo
/bin/echo
% /bin/echo --version
--version
이는 다음을 참조하여 설명됩니다. Apple은 man echo
새 랩탑에 2002 BSD 버전을 패키징합니다. Apple은 이 매개변수만 지원합니다. :)echo
-n
답변3
echo
내 생각에는 GNU Bash와 GNU Coreutils의 두 가지 프로그램이 있는 것 같습니다 .
echo
GNU 배쉬에서
(GNU Bash) 를 찾으려면
echo
다음 명령을 사용help
하거나help echo
(GNU Bash)를 실행하려면
echo
다음을 사용해 보십시오.echo
echo "Hello World" echo -e "line 1\ttab\nline2" echo --help # will return error "--help" echo --version # will return error "--version" help echo
Bash 버전을 알고 싶다면 시도해 보세요
bash --version
. echo GNU Bash 버전이 있나요?
echo
GNU Coreutils에서
- echo(GNU Coreutils)를 찾으려면 다음 명령을 사용할 수 있습니다.
dpkg-query --listfiles coreutils | egrep '/bin/|/sbin/' man echo which echo
- echo(GNU Coreutils)를 실행하려면 다음을 호출해야 합니다.
/bin/echo
/bin/echo "Hello World" /bin/echo -e "line 1\ttab\nline2" /bin/echo --help # will return GNU Coreutils help /bin/echo --version # will return GNU Coreutils version help /bin/echo # will return error