다음 스크립트가 있습니다.
#!/bin/bash
function consoleWriteLine() {
echo $* >&2
}
consoleWriteLine " indented by 4 spaces"
실행할 때 다음과 같은 결과가 나타납니다.
$ ./test.sh
indented by 4 spaces
내 4 칸은 어디로 갔습니까? 어떻게 다시 돌려받을 수 있습니까?
다음 스크립트가 있습니다.
#!/bin/bash
function consoleWriteLine() {
echo $* >&2
}
consoleWriteLine " indented by 4 spaces"
실행할 때 다음과 같은 결과가 나타납니다.
$ ./test.sh
indented by 4 spaces
내 4 칸은 어디로 갔습니까? 어떻게 다시 돌려받을 수 있습니까?
답변:
echo함수 에서을 인용하십시오 .
function consoleWriteLine() {
echo "$*" >&2
}
echo공백으로 구분 된 여러 인수를 확인하고 단일 공백으로 구분하여 인쇄합니다 . 보다:
$ echo a b c
a b c
$ echo a b c
a b c
$ echo "a b c"
a b c
마지막 예제에서 문자열 a b c은 하나의 단일 인수이며 echo그대로 사용됩니다.
$*변형 $@은 인용 할 때 별도의 단어 로 확장되도록 특별히 만들어졌습니다 . "$@"여러 개의 인수가 될 수 있으며 "$*"항상 하나입니다. echo차이가없는 몇 가지 명령 중 하나입니다.
이 문제가 스스로 있었다면
에 따라 이 블로그는 당신은 공백을 포함 기본적으로 IFS를 변경해야하는 등보고 "XXX YYY ZZZZ"그들 사이의 공백으로 3 개 문자열로.
IFS='\n'
명령이 수정되기 전에 IFS를 설정 해제하여 변경 사항을 제거하십시오.
unset IFS
consoleWriteLine. 두 번째로echo, 공백은 추가 인용 부호로 다시 보존해야합니다. 나는 당신이 주위에 따옴표를 넣을 수 있다고 생각하지 않았을 것$*입니다.