我理解修饰符### %%%,但我无法弄清楚它是否可以在tcsh中将它们链接在一起.
tcsh中的示例
set f = /foo/bar/myfile.0076.jpg echo $f:r:e --> 0076 echo $f:h:t --> bar
在bash中,我想知道如何做以下事情:
echo ${f%.*#*.}
在一条线上.
我的目标是能够在命令行上根据需要以各种方式操作文件名.我不是要为一个特定的案例编写脚本.因此,如果有一种方法可以链接这些修饰符,或者可能有另一种方式,那么我很想知道.谢谢
在bash中,您可以嵌套参数扩展,但只能在${parameter#word}的单词部分中有效.
例如:
$var="foo.bar.baz"; echo ${var%.*} foo.bar $var="foo.bar.baz"; echo ${var#foo.bar} .baz $var="foo.bar.baz"; echo ${var#${var%.*}} .baz
要使用纯参数扩展来执行您想要的操作,您需要具有如下的临时变量:
$var="/foo/bar/myfile.0076.jpg"; tmp=${var#*.}; out=${tmp%.*}; echo $out 0076
但是,如果您愿意使用set builtin,那么您实际上可以一次性访问所有字段,并巧妙地使用搜索/替换参数扩展,如下所示:
$var="/foo/bar/myfile.0076.jpg"; set -- ${var//[.\/]/ }; echo $4 0076