스크립트:
#!/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