$ {1}和$ {*}有什么作用?

时间:2014-01-07 09:16:15

标签: linux bash nagios

Nagios script使用${1}${*},如此

if [ "${1}" ]; then
    if [ "${ERRORSTRING}" ]; then
        echo "${ERRORSTRING} ${OKSTRING}" | sed s/"^\/ "// | mail -s "$(hostname -s): ${0} reports errors\
" -E ${*}
    fi
else
    if [ "${ERRORSTRING}" -o "${OKSTRING}" ]; then
        echo "${ERRORSTRING} ${OKSTRING}" | sed s/"^\/ "//
        exit ${ERR}
    else
        echo no zpool volumes found
        exit 3
    fi
fi

问题

${1}${*}做了什么?

3 个答案:

答案 0 :(得分:6)

命令行参数$ 1,$ 2,$ 3,... $ 9是位置参数,$ 0指向实际的命令,程序,shell脚本或函数,$ 1,$ 2,$ 3,... $ 9作为该命令的参数。

“$ *”特殊参数将整个列表作为一个参数,其间带有空格,“$ @”特殊参数获取整个列表并将其分隔为单独的参数。

假设test.sh如下:

#!/bin/sh 
echo "File Name: $0" 
echo "First Parameter : $1" 
echo "First Parameter : $2" 
echo "Quoted Values: $@" 
echo "Quoted Values: $*" 
echo "Total Number of Parameters : $#"

enter image description here

答案 1 :(得分:4)

在手册中引用Special Parameters

  

*

     

从一个开始扩展到位置参数。当扩展发生在双引号内时,它会扩展为单个单词   每个参数的值由第一个字符分隔   IFS特殊变量。也就是说,"$*"相当于"$1c$2c…",   其中cIFS变量值的第一个字符。如果   未设置IFS,参数由空格分隔。如果IFS为空,   参数连接时没有插入分隔符。

$1指的是Positional Parameter


假设以下脚本:

echo "${1}"
echo "${*}"

通过说:

来调用
bash scriptname foo bar baz

它会产生:

foo
foo bar baz

现在观察变量IFS的效果。鉴于脚本:

IFS=
echo "${1}"
echo "${*}"
echo "${@}"

通过说:

来调用它
bash scriptname "foo:hey you" bar baz

会产生:

foo:hey you
foo:hey youbarbaz
foo:hey you bar baz

答案 2 :(得分:1)

使用$ 1(以交互方式显示或获取用户输入)以显示第一个参数。

$ *用于显示输入的所有参数。

 # cat schecking.sh
 #!/bin/bash
 echo "All values:" "$*"
 echo "Total number of Parameter(s) :" "$#"

 # ./schecking.sh
 All values:
 Total number of Parameter(s) : 0

 # ./schecking.sh It will help us to check
 All values: It will help us to check
 Total number of Parameter(s) : 6

 # cat schecking.sh
 #!/bin/bash
 echo "First value is:" $1
 echo "All values:" "$*"
 echo "Total number of Parameter(s) :" "$#"

 # ./schecking.sh It will help us to check
 First value is: It
 All values: It will help us to check
 Total number of Parameter(s) : 6