나는 이 기능을 가지고 있습니다 :
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
의 값은 입니다.$2
message
기능을 동일하게 유지하고 사용할 수 있습니다
Info 'some message'
또는
Info "$mymessage"
또는
Info "${mymessagearray[*]}"
전체 메시지를 인용하면 메시지 문자열이 첫 번째 매개변수가 되어 $1
함수 내에서 사용할 수 있게 됩니다.
mymessagearray
위 배열 의 경우 [*]
대신 사용 [@]
하여단일 문자열배열의 모든 요소는 첫 번째 문자로 구분됩니다 $IFS
(기본값은 공백). 이 단일 문자열은 인용되어 있으므로(코드에서는 큰따옴표) 모두 $1
.
$*
또 다른 방법은 인쇄 중인 문자열을 확장하는 것입니다 . 값은 첫 번째 문자로 "$*"
구분된 모든 매개변수의 값 입니다(기본값은 공백).$IFS
Info () {
echo "$cyan$*$reset"
}
개인적으로 저는 메시지가 공백으로 분할되거나 파일 이름 글로빙을 수행하지 않고 있는 그대로 인쇄되도록 매개변수 주위에 따옴표를 사용하기로 선택합니다(따옴표가 없는 값 상황에서 함수를 호출하면 이런 일이 발생합니다).