常见特殊变量$#,$*,$@,$0,$1,$2…$n,${0##*/}
一、文件名|参数相关
变量名 | 作用 |
---|---|
$# | 参数个数 |
$* | 参数列表,用双引号”“括起来时参数以”$1 $2…$n”形式呈现 |
$@ | 参数列表,用双引号”“括起来时参数以”$1” “$2”…”$n”形式呈现 |
$0 | shell文件名 |
$1,$2,…,$n | 依次表示参数1,2,…,n |
示例代码
#!/bin/sh
echo "all parameter is " $*
echo "all parameter2 is " $@
echo "parameter length is " $#
echo "file name is " ${0##*/}
echo "first parameter is " $1
echo "second parameter is" $2
for i in "$*"
do
echo $i
done
for var in "$@"
do
echo $var
done
运行结果:
二、$*与$@区别
不用双引号“”括起来时,他们表示的意思一样。
如果用双引号”“括起来,$*表示的参数会默认为一行字符串,若用数组表示,数组长度为1,而$@表示的参数和不用双引号括起来效果是一样的,若用数组表示长度和原来的数组长度相等。
示例:
#!/bin/sh
var1=("$*")
var2=("$@")
echo "var1 size: "${#var1[*]}
echo "var2 size: "${#var2[*]}
运行结果:
三、${}提取与替换
利用${file##*/} 和 \${file%/*}可以分别取到绝对路径下的文件名和根文件夹,如图。
详细介绍见下表
表达式 | 作用 | 备注 |
---|---|---|
#*/ | 删除”/”左边部分,#代表第一个,##代表最后一个 | “/”可变 |
%/* | 删除”/”右边部分,%代表最后一个,%%代表第一个 | 同上 |