如何保留传递给函数的参数扩展?

如何保留传递给函数的参数扩展?

我有这个功能:

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值为。$2message

您可以保持函数不变,然后使用

Info 'some message'

或者

Info "$mymessage"

或者

Info "${mymessagearray[*]}"

引用整个消息可确保消息字符串是第一个参数,因此它将在$1函数内部可用。

对于mymessagearray上面的数组,使用[*]代替可以[@]得到单个字符串数组的所有元素均由第一个字符$IFS(默认为空格)分隔。这个单个字符串被引用(代码中的双引号),因此它全部传递到$1.

另一种方法是扩展$*您正在打印的字符串。该值是由第一个字符(默认为空格)"$*"分隔的所有参数的值。$IFS

Info () {
    echo "$cyan$*$reset"
}

就我个人而言,我会选择在参数周围使用引号,确保消息按原样打印,而不用空格分割它或对其执行文件名通配(如果您使用不带引号的值调用函数,就会发生这种情况)。

相关内容