1. 特殊变量:
0,
#,
?,
@,
?,
$和命令行参数
$0 当前脚本的文件名
$# 传递给脚本或者函数的参数个数
$n 传递给脚本或者函数的参数。$1代表第一个参数、$2代表第二个参数
$* 传递给脚本或者函数的所有参数
$@ 传递给脚本或函数的所有参数。被双引号(" ")包含时,与 $* 稍有不同,下面将会讲到。
$? 上个命令的退出状态,或函数的返回值。一般情况下,大部分命令执行成功会返回 0,失败返回 1。
$$ 当前Shell进程ID。对于 Shell 脚本,就是这些脚本所在的进程ID。
2.
?和
@ 的区别
?和
@ 都表示传递给函数或脚本的所有参数,不被双引号(” “)包含时,都以”
1""
2” … “
n”的形式输出所有参数。但是当它们被双引号(”“)包含时,”
*" 会将所有的参数作为一个整体,以"
1
2 …
n”的形式输出所有参数;”
@" 会将各个参数分开,以"
1”“
2" … "$n” 的形式输出所有参数。
#!/bin/bash
echo "$*=" $*
echo ""$*"=" "$*"
echo "$@=" $@
echo ""$@"=" "$@"
echo "print each param from $*"
for var in $*
do
echo "$var"
done
echo "print each param from $@"
for var in $@
do
echo "$var"
done
echo "print each param from "$*""
for var in "$*"
do
echo "$var"
done
echo "print each param from "$@""
for var in "$@"
do
echo "$var"
done
执行 ./test.sh "a" "b" "c",看到下面的结果:
$*= a b c
"$*"= a b c
$@= a b c
"$@"= a b c
print each param from $*
a
b
c
print each param from $@
a
b
c
print each param from "$*"
a b c
print each param from "$@"
a
b
c
说明:双引号包含时,"$*"的参数被当做一个整体,而"$@"还是遍历每一个参数
3. ${}、##和%%使用范例
file="/dir1/dir2/dir3/my.file.txt"
${file
${file
${file
${file
${file%/*}:删掉最后一个 / 及其右边的字符串:/dir1/dir2/dir3
${file%%/*}:删掉第一个 / 及其右边的字符串:(空值) ${file%.*}:删掉最后一个 . 及其右边的字符串:/dir1/dir2/dir3/my.file
${file%%.*}:删掉第一个 . 及其右边的字符串:/dir1/dir2/dir3/my ${file:0:5}:提取最左边的 5 个字节:/dir1 ${file:5:5}:提取第 5 个字节右边的连续5个字节:/dir2 ${file/dir/path}:将第一个dir 替换为path:/path1/dir2/dir3/my.file.txt ${file//dir/path}:将全部dir 替换为 path:/path1/path2/path3/my.file.txt ${#file} 可得到 27 ,因为/dir1/dir2/dir3/my.file.txt 是27个字节 (编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|