함수에 전달된 매개변수 확장을 어떻게 보존하나요?

함수에 전달된 매개변수 확장을 어떻게 보존하나요?

나는 이 기능을 가지고 있습니다 :

cyan=`tput setaf 6`
reset=`tput sgr0`
function Info()
{
    echo "${cyan}$1${reset}"
}

simple 과 같은 다른 스크립트에서 사용합니다 Info some message.

그러나 이를 사용하여 배열의 모든 항목을 인쇄하면 첫 번째 항목만 인쇄됩니다.

Info "${ArrayVariable[@]}" # this only prints the first item

echo ${ArrayVariable[@]}" # this prints all of them

이 구문과 함수를 사용할 때 어떻게 모든 변수를 유지할 수 있습니까?

답변1

함수에서 $1첫 번째 매개변수로 확장합니다. 다음을 사용하여 함수를 호출할 때

Info some message

$1...그러면 의 값은 이고, some의 값은 입니다.$2message

기능을 동일하게 유지하고 사용할 수 있습니다

Info 'some message'

또는

Info "$mymessage"

또는

Info "${mymessagearray[*]}"

전체 메시지를 인용하면 메시지 문자열이 첫 번째 매개변수가 되어 $1함수 내에서 사용할 수 있게 됩니다.

mymessagearray위 배열 의 경우 [*]대신 사용 [@]하여단일 문자열배열의 모든 요소는 첫 번째 문자로 구분됩니다 $IFS(기본값은 공백). 이 단일 문자열은 인용되어 있으므로(코드에서는 큰따옴표) 모두 $1.

$*또 다른 방법은 인쇄 중인 문자열을 확장하는 것입니다 . 값은 첫 번째 문자로 "$*"구분된 모든 매개변수의 값 입니다(기본값은 공백).$IFS

Info () {
    echo "$cyan$*$reset"
}

개인적으로 저는 메시지가 공백으로 분할되거나 파일 이름 글로빙을 수행하지 않고 있는 그대로 인쇄되도록 매개변수 주위에 따옴표를 사용하기로 선택합니다(따옴표가 없는 값 상황에서 함수를 호출하면 이런 일이 발생합니다).

관련 정보