답변:
echo
동작이 다른 여러 버전의 명령이 있습니다. 분명히 스크립트에 사용 된 쉘은 인식하지 못하는 버전을 사용합니다 -n
.
이 printf
명령에는 훨씬 더 일관된 동작이 있습니다. echo
와 같은 간단한 작업 echo hello
에는 적합하지만 printf
더 복잡한 작업에 사용 하는 것이 좋습니다 .
어떤 시스템을 사용하고 있으며 스크립트에서 사용하는 쉘은 무엇입니까?
#!/bin/bash
작동했습니다. 일반적으로 bash와 함께 일하고 있습니다.
printf
명령이있을 것입니다.
echo
항상 줄 바꿈을 추가합니다 ... 해결 방법은 기발합니다.
%
쉘 프롬프트입니다. 이것을 시도하고주의 깊게보십시오 :printf hello; sleep 5
bash
"echo"라는 "내장"명령이 있습니다.
$ type echo
echo is a shell builtin
또한 적절한 실행 파일 인 "echo"명령 (즉, /bin/echo
해석 echo
및 실행과 반대로 쉘 포크 및 execs )이 있습니다.
$ ls -l /bin/echo
-rwxr-xr-x 1 root root 22856 Jul 21 2011 /bin/echo
하나의 동작 echo
에의 WRT \c
와는 -n
다릅니다. 가장 좋은 방법 printf
은를 사용하는 것입니다. 이것은 내가 본 네 가지 * NIX 맛에서 사용할 수 있습니다.
$ printf "a line without trailing linefeed"
$ printf "a line with trailing linefeed\n"
함께 시도
echo -e "Some string...\c"
예상대로 작동합니다 (귀하의 질문에서 알 수 있듯이).
이 정보는 man
페이지 에서 얻었습니다 . 이 man
페이지는 또한 쉘에 자체 버전이있을 수 있으며 자체 버전이 echo
있는지 확실하지 않습니다 bash
.
echo "some string...\c"
대신 말하기 를 원할 것입니다. 그러나 매우 다른 echo 명령을 사용하여 여러 bash 변형을 지원 해야하는 경우 printf를 사용하는 것이 더 좋거나 echo 명령 기능을 확인해야합니다 [ -n "$( echo -e )" ] && echo "sh stuff\c" || echo -e "bash stuff\c"
(적어도 bash는 \ c도 지원하므로 사용할 필요가 없습니다) -n 옵션이지만 bash에는 -e가 필요합니다)
"읽기"와 같은 다른 명령과 함께 if 내부에서 echo를 사용하면 설정을 무시할 수 있으며 어쨌든 새 줄로 넘어갑니다.
단지에 대한 가장 인기있는 리눅스 Ubuntu
및 그것입니다 bash
:
어떤 쉘을 사용하고 있습니까? 대부분 아래에서 작동합니다. 그렇지 않으면 다음을 참조하십시오 .
echo $0
위가 인쇄 bash
되면 아래가 작동합니다.
printf "hello with no new line printed at end"
또는
echo -n "hello with no new line printed at end"
enable -n echo
echo -n "Some string..."
bash
bourne shell 모드로 실행하면 여기서 잘 작동합니다. 또한 대화식 쉘로 Bourne 쉘을 실제로 사용하고 있지 않을 수도 있습니다.