Shell 变量

来源:互联网 发布:dota情书淘宝零食店 编辑:程序博客网 时间:2024/06/08 04:05

${varname:-word}
${varname:=word}
${varname:?word}
${varname:+word}

上面中每个运算符内的冒号(:)都是可选的。如果省略冒号,则将每个定义中的“存在且非NUll”部分改成“存在”。也就是说,运算符仅用于测试变量是否存在。
POSIX 标准化额外的运算符,用来执行模式匹配与删除变量值里的文本。新的模式匹配运算符,通常是用来切分路径名称的组成部分。例如目录前缀与文件名后缀。
path=/home/tolstoy/mem/long.file.name

${variable#pattern} 如果模式匹配于变量值的开头处,删除匹配的最短部分,并返回剩下的部分。
e.g.: ${path#/*/} 结果: tolstoy/mem/long.file.name

${variable##pattern} 如果模式匹配于变量值的开头处,则删除匹配的最长部分,并返回剩下的部分。
${path##/*/} 结果:long.file.name

${variable%pattern} 如果模式匹配于变量值的结尾处,则删除匹配的最短部分,并返回剩下的部分。
${path%.*} 结果: /home/tolstoy/mem/long.file

${variable%%pattern} 如果模式匹配于变量的结尾处,则删除匹配的最长部分,并返回剩下部分。
${path%%.*} 结果: /home/tolstoy/mem/long

匹配模式:
/*/: 匹配任何位于两个斜杠之间的元素;
.* : 匹配点号之后接着的任何元素;

POSIX标准化字符串长度运算符:
${#variable} 返回$variable值里的字符长度.


位置参数:

positional parameter : 指的是shell 脚本的命令行参数; 同时也表示在shell函数内的函数参数。
他们的名称是以单个的整数来命名。
出于历史原因,当这个整数大于9时,就应该以花括号({}) 括起来:



特殊的“变量”: 提供了对传递参数的总数的访问,以及一次对所有参数的访问:

$#
提供传递到shell脚本或函数的参数总数。
当你是为了处理选项和参数而建立循环时,他会很有用。

while [ $# != 0 ]以shift逐渐减少$#,循环将会终止
do
case $1 in处理第一个参数
...
esac
shift移开第一个参数
done

$*,$@
一次表示所有的命令行参数。这两个参数可用来把命令行参数传递给脚本或函数所执行的程序。
“$*"
将所有命令行参数视为单个字符串。等同于“$1 $2 .."。$IFS 的第一个字符用来作为分割符,以分割不同的值 来建立字符串。举例:
printf "The arguments were %s\n" "$*"

"$@"
将所有命令行参数视为单独的个体,也就是单独字符串。等同于 “$1" "$2" ...
这是将参数传递给其他程序的最佳方式,因为它会保留所有内嵌在每个参数里的任何空白。
lpr "$@" 显示每一个文件

原创粉丝点击