$1 和 $* 有啥作用? [复制]

Posted

技术标签:

【中文标题】$1 和 $* 有啥作用? [复制]【英文标题】: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$* 有什么作用?

【问题讨论】:

【参考方案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

【讨论】:

以上是关于$1 和 $* 有啥作用? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

等号后面的波浪号有啥作用? [复制]

spring 组件和 bean 的作用域有啥区别? [复制]

"||=" 在 Ruby 1.9.2 中有啥作用? [复制]

css 选择器 ~、+、> 有啥作用? [复制]

有啥作用?。和 ?? javascript中的操作符是做啥的? [复制]

类名后的分号有啥作用? [复制]