我有这个功能:
cyan=`tput setaf 6`
reset=`tput sgr0`
function Info()
{
echo "${cyan}$1${reset}"
}
我在其他脚本中使用它,就像Info some message
.
但是,当我使用它来打印数组的所有项时,它只打印第一项:
Info "${ArrayVariable[@]}" # this only prints the first item
echo ${ArrayVariable[@]}" # this prints all of them
使用此语法和此函数时,如何保留所有变量?
在您的函数中,
$1
扩展为第一个参数。当您使用... 那么 的 值
$1
是some
, 而 的 值$2
是message
。您可以保持功能不变,而是使用
或者
或者
引用整个消息可确保消息字符串是第一个参数,因此它将在
$1
函数内部可用。在上面的数组的情况下
mymessagearray
,使用[*]
in place[@]
为您提供一个字符串,其中数组的所有元素由第一个字符分隔$IFS
(默认为空格)。这个单字符串被引用(代码中的双引号),所以它都被传递给你的函数$1
。另一种方法是扩展
$*
您正在打印的字符串。该值是由(默认为空格)"$*"
的第一个字符分隔的所有参数的值。$IFS
就个人而言,我会选择在参数周围使用引号,以确保消息按原样打印,而不会将其拆分为空格或对其执行文件名通配(如果您使用未引用的值调用函数,则会发生这种情况)。