쉘 스크립트 함수에 공백이 포함된 매개변수를 전달하는 방법은 무엇입니까? [복사]

쉘 스크립트 함수에 공백이 포함된 매개변수를 전달하는 방법은 무엇입니까? [복사]

함수에 여러 인수를 전달하려고 하는데 인수 중 하나가 두 단어로 구성되어 있고 셸 함수가 이를 하나의 인수로 처리하도록 하고 싶습니다.

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("$@")

스크립트는 어떤 공백이 어느 것인지(어떤 단어가 함께 가는지) 알 수 없기 때문에 이를 스크립트에서 자동화할 수 있는 방법이 없습니다.

관련 정보