echo $1 = 인용되지 않은 공백 문자열?

echo $1 = 인용되지 않은 공백 문자열?

스크립트:

#!/bin/sh
echo $1

변수를 보내고 싶지만 따옴표는 사용하지 않습니다.

예:

 ./script 1 2 3

위의 내용은아니요일(인쇄하다1 2 3)
왜냐하면1 2 3따옴표 안에는 없습니다.

나는 따옴표를 사용하고 싶지 않습니다.
따옴표를 입력하는 데 추가 시간이 걸리기 때문입니다.

가능한?

답변1

스크립트를 다음과 같이 변경할 수 있습니다.

#!/bin/sh
echo "$*"

"$*"이 문자열에 전달된 모든 인수를 포함하고 각 인수 사이에 공백으로 연결된 단일 문자열로 확장됩니다. 그러므로

$ ./script 1 2 3
1 2 3

그러나 이는 명령줄의 스크립트 이름 뒤에 문자 그대로 아무것도 전달하지 않습니다. 그것은 불가능합니다. 예를 들어, 여러 공백은 인수를 구분하기 때문에 함께 압축됩니다.

$ ./script 1  2 3
1 2 3

쉘 특수 문자는 여전히 확장됩니다.

$ ./script 2 * 2
2 bin dev etc home lib lost+found proc run sbin tmp sys usr var 2
$ ./script hello ; world
hello
bash: world: command not found

이를 사용하여 따옴표 없이 스크립트에 변수를 전달할 수 없습니다. 먼저 변수 값을 공백으로 분할한 다음 하나 이상의 파일 이름과 일치하는 와일드카드를 확장하고 마지막으로 결과를 연결하기 때문입니다.

$ foo='2  *  2'
$ ./script $foo
2 bin dev etc home lib lost+found proc run sbin tmp sys usr var 2

답변2

이 스크립트는 다음과 같습니다.

#!/bin/sh
echo $@

생산하다:

$ ./test.sh 1 23 4 5 6
$ 1 23 4 5 6

관련 정보