【问题标题】:What does ${1} and ${*} do? [duplicate]${1} 和 ${*} 有什么作用? [复制]
【发布时间】:2014-01-24 21:47:40
【问题描述】:

这个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}${*} 有什么作用?

【问题讨论】:

    标签: linux bash nagios


    【解决方案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
    

    【讨论】:

      【解决方案2】:

      命令行参数 $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 : $#"
      

      【讨论】:

        【解决方案3】:

        引用手册中的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
        

        【讨论】:

          猜你喜欢
          • 2015-09-29
          • 2018-08-21
          • 1970-01-01
          • 1970-01-01
          • 2016-12-27
          • 2013-07-24
          • 2015-05-03
          • 2014-11-11
          • 2019-07-11
          相关资源
          最近更新 更多