Bash中的大括号扩展

最近有人问${}里面的参数怎么看不懂呢?
${name:-default}使用一个默认值(一般是空值)来代替那些空的或者没有赋值的变量name;
例子
1,

 $ cat var_seq.sh
# Print 1 to 4 using sequences.
for i in {1..4}
do
        echo $i
done
start=1
end=4

# Print 1 to 4 using through variables
echo "Sequences expressed using variables"
for i in {$start..$end}
do
        echo $i
done

$ ./var_seq.sh
1
2
3
4
Sequences expressed using variables
{1..4}

2,

unset name
echo ${name:-111}

结果111
name=222
echo ${name:-111}
结果222
${name:=default}使用指定值来代替空的或者没有赋值的变量name;
貌似和上一个一样

3,

$ ksh
$ echo /var/log/messages.{1..7..2}
/var/log/messages.1 /var/log/messages.3 /var/log/messages.5 /var/log/messages.7
$

${name:?message}如果变量为空或者未赋值,那么就会显示出错误信息并中止脚本的执行同时返回退出码1。
${#name} 给出name的长度
${name%word} 从name的尾部开始删除与word匹配的最小部分,然后返回剩余部分
${name%%word} 从name的尾部开始删除与word匹配的最长部分,然后返回剩余部分
${name#word} 从name的头部开始删除与word匹配的最小部分,然后返回剩余部分
${name##word} 从name的头部开始删除与word匹配的最长部分,然后返回剩余部分

参考:
http://www.thegeekstuff.com/2010/06/bash-shell-brace-expansion/#more-4614
http://www.linuxidc.com/Linux/2011-04/34731.htm

发表评论

您的电子邮箱地址不会被公开。