%20%EC%99%80%20echo%20%22%24(cal)%22%20%EC%9D%98%20%EC%B0%A8%EC%9D%B4%EC%A0%90.png)
저는 Linux에서 echo $(cal)
and를 사용하고 echo "$(cal)"
있는데 그림과 같이 다른 결과가 나타납니다. $
이 경우 큰따옴표가 방해해서는 안 되므로 와 echo "$(cal)"
비교하여 가로 스타일을 제공하는 것은 무엇입니까 echo $(cal)
?
결과는 다음과 같습니다.
echo "$(cal)"
Su Mo Tu We Th Fr Sa
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30
echo $(cal)
June 2019 Su Mo Tu We Th Fr Sa 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
답변1
두 가지 주요 차이점이 있습니다.
쉘이 수행하는단어 분리인용되지 않은
$(cal)
. 이는 의 기본값을 가정하면IFS
모든 공백 문자열(줄바꿈 포함)이 단일 공백으로 대체됨을 의미합니다. 따옴표가 없는 명령의 출력은 한 줄에 있습니다.다음은 더 간단한 예입니다.
$ s='line 1 > line 2' $ echo "$s" line 1 line 2 $ echo $s line 1 line 2
보시다시피,
echo
큰따옴표가 없는 두 번째 에서는 모든 공백 시퀀스가 단일 공백으로 대체되었습니다. 이것은echo
큰따옴표 없이 를 사용할 때 본 것과 같습니다echo $(cal)
.쉘이 수행하는경로명 확장단어 분할의 결과. 이는 예제에서 아무런 차이를 만들지 않지만 출력에 다른 전역 활성 문자가 포함되어 있으면
?
놀라운*
일이 발생할 수 있습니다.다음은 간단한 예입니다.경로명 확장. 세 개의 파일이 있는 디렉터리부터 시작해 보겠습니다.
$ ls file1 file2 file3
이제 문자열을 정의해 보겠습니다: $ s='file?'
이제
echo
큰따옴표를 사용하면 문자열을 반환하지만 큰따옴표가 없으면 문자열이 파일 이름으로 확장됩니다.$ echo "$s" file? $ echo $s file1 file2 file3