我有这个功能:
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
扩展到第一个参数。当您使用调用函数时
Info some message
$1
...则的值为,而的some
值为。$2
message
您可以保持函数不变,然后使用
Info 'some message'
或者
Info "$mymessage"
或者
Info "${mymessagearray[*]}"
引用整个消息可确保消息字符串是第一个参数,因此它将在$1
函数内部可用。
对于mymessagearray
上面的数组,使用[*]
代替可以[@]
得到单个字符串数组的所有元素均由第一个字符$IFS
(默认为空格)分隔。这个单个字符串被引用(代码中的双引号),因此它全部传递到$1
.
另一种方法是扩展$*
您正在打印的字符串。该值是由第一个字符(默认为空格)"$*"
分隔的所有参数的值。$IFS
Info () {
echo "$cyan$*$reset"
}
就我个人而言,我会选择在参数周围使用引号,确保消息按原样打印,而不用空格分割它或对其执行文件名通配(如果您使用不带引号的值调用函数,就会发生这种情况)。