Shell 变量

${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 "$@" 显示每一个文件

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值