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