下面的命令会做什么以及会给出什么输出?
echo "{$begin_dt/{0[7-9],1*,2*},$dates/*,$next_dt/0[0-6]}"
哪里$begin_dt
和$next_dt
是日期。
答案1
问题标题中的字符串与问题本身中的字符串略有不同。也就是说,后者用引号引起来,而标题中的则没有。
外部报价,大括号{...}
展开到大括号旁边的字符串,并连接到大括号内所有以逗号分隔的字符串。 iestring{this,that}
扩展为stringthis
and stringthat
,使您免于重复公共部分。
之后会发生文件名通配,因此类似的内容dir/{0[7-9],1*,2*}
将扩展为dir/0[7-9]
,dir/1*
然后dir/2*
所有这些都将扩展为匹配的文件名。
如果文件名是两位数的月份中的天数,则它将匹配数字 07 到 29。(但不匹配 30 或 31!)
示例中的外部大括号组将类似地扩展。
里面引号,大括号没有什么特别的,文件名扩展也没有完成,所以扩展的只是变量。
在 Bash 和其他具有大括号扩展的 shell 中,这不是 POSIX sh 的功能。