함수에 여러 인수를 전달하려고 하는데 인수 중 하나가 두 단어로 구성되어 있고 셸 함수가 이를 하나의 인수로 처리하도록 하고 싶습니다.
args=("$@")
function(){
echo ${args[0]}
echo ${args[1]}
echo ${args[2]}
}
이 명령을 호출하면sh shell hi hello guys bye
알겠어요
hi
hello
guys
하지만 내가 정말로 원하는 것은:
hi
hello guys
bye
답변1
두 번째 매개변수만 인용해야 합니다.
myfunc(){
echo "$1"
echo "$2"
echo "$3"
}
myfunc hi "hello guys" bye
답변2
이는 쉘(쉘 스크립트, C 프로그램, Python 프로그램...)에서 무엇이든 호출하는 것과 같습니다.
Unix 셸에서 호출되고 인수에 공백이 있으면 이를 인용해야 합니다.
sh my-shell-script hi "hello guys" bye
작은따옴표를 사용할 수도 있는데, 이것이 더 강력합니다. 이는 쉘이 어떤 것도 해석하지 못하게 합니다( , , , $
등 !
, \
제외 ) .*
"
'
sh my-shell-script hi 'hello guys' bye
또한 함수/스크립트에 사용된 모든 변수를 인용해야 합니다.
귀하의 예에서는 인수가 함수에 도달하기 전에 축소됩니다(스크립트에 전달되기 때문에).
#!/bin/sh
my_procedure{
echo "$1"
echo "$2"
echo "$3"
}
my_procedure("$@")
스크립트는 어떤 공백이 어느 것인지(어떤 단어가 함께 가는지) 알 수 없기 때문에 이를 스크립트에서 자동화할 수 있는 방법이 없습니다.