$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…"
, 其中c
是IFS
变量值的第一个字符。如果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 中有啥作用? [复制]