에코의 다른 동작을 관찰하는 이유는 무엇입니까?

에코의 다른 동작을 관찰하는 이유는 무엇입니까?

나는 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전달된 문자열만 변경됩니다.

관련 정보