shell 特殊符号用法

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#*/}:删掉第一个 / 及其左边的字符串:dir1/dir2/dir3/my.file.txt
${file##*/}:删掉最后一个 / 及其左边的字符串:my.file.txt
${file#*.}:删掉第一个 . 及其左边的字符串:file.txt
${file##*.}:删掉最后一个 . 及其左边的字符串:txt
${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个字节

相关文章

用的openwrt路由器,家里宽带申请了动态公网ip,为了方便把2...
#!/bin/bashcommand1&command2&wait从Shell脚本并行...
1.先查出MAMP下面集成的PHP版本cd/Applications/MAMP/bin/ph...
1、先输入locale-a,查看一下现在已安装的语言2、若不存在如...
BashPerlTclsyntaxdiff1.进制数表示Languagebinaryoctalhexa...
正常安装了k8s后,使用kubect工具后接的命令不能直接tab补全...