나는 echo의 다음 동작을 관찰했습니다
#!/bin/bash
x=" hello"
echo $x
echo "$x"
이제 위의 코드를 실행하면
ronnie@ronnie:~$ bash test.sh
hello
hello
ronnie@ronnie:~$
따라서 누군가 이것이 첫 번째 경우의 출력에 나타나지 않는 이유를 설명 whitespace
하고 이 동작을 정의하는 문서를 알려줄 수 있습니까?
답변1
이것은 행동이 아닙니다 echo
. 이것은 배쉬 동작입니다. Bash 양식을 사용하는 경우 echo $x
다음 명령을 사용하여 처리( ␣
공백으로 처리)합니다.
echo␣␣hello
그런 다음 이 명령은 토큰화되고 bash는 두 개의 토큰을 얻습니다. echo
따라서 hello
출력은 다음과 같습니다.hello
이 양식을 사용하면 echo "$x"
bash는 토크나이저의 입력에 다음을 갖습니다.
echo␣"␣hello"
echo
따라서 두 개의 토큰 이 있으므로 ␣hello
출력이 다릅니다.
답변2
다른 출력이 표시되는 이유는 해당 echo[1 space]Hello
행이 구문적으로 와 동일하기 때문입니다 echo[5 spaces]Hello
. 공백은 무시되고 "Hello"라는 단어는 인수로 처리됩니다 echo
. 가장 간단한 형태의 첫 번째 줄은 귀하가 말하는 내용과 매우 유사합니다 echo "Hello"
. 두 번째 줄에서는 echo
에 대한 인수의 일부로 선행 공백을 명시적으로 포함했습니다 echo " Hello"
.
첫 번째 줄에서는 5자 문자열을 에 전달하고 echo
, 두 번째 줄에서는 6자 문자열을 에 전달합니다 echo
.
따라서 실제로 echo
두 경우 모두의 동작은 동일하며 echo
전달된 문자열만 변경됩니다.