関数に渡されたパラメータ拡張をどのように保存しますか?

関数に渡されたパラメータ拡張をどのように保存しますか?

私はこの機能を持っています:

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"
}

個人的には、メッセージが空白に分割されるか、ファイル名のグロービングが行われていないまま印刷されるように、パラメータの周りに引用符を使用することを選択します(引用符がない値の状況で関数を呼び出すとこれが発生します)。

関連情報