如何在bash中嵌套操作?例如,我知道
$(basename $var)
只会给我路径的最后一部分,
${name%.*}
在扩展之前将所有内容都给了我。
我如何结合这两个电话,我想做些类似的事情:
${$(basename $var)%.*}
答案 0 :(得分:2)
作为@ sid-m的回答状态,您需要更改两个扩展的顺序,因为其中一个(%
东西)只能应用于变量(通过给出其名称): / p>
echo "$(basename "${var%.*}")"
其他要提及的内容:
basename
也可以为您删除该文件扩展名:basename "$var" .txt
(这将为foo
中的foo.txt
打印$var
{1}}。)答案 1 :(得分:1)
您可以这样做
echo $(basename ${var%.*})
这只是需要更改的顺序。
答案 2 :(得分:0)
假设您要分割文件名,这是一个简单的模式:
$ var=/some/folder/with/file.ext
$ echo $(basename $var) | cut -d "." -f1
file
答案 3 :(得分:0)
如果您事先知道文件扩展名,则可以告诉basename
删除它,作为第二个参数或通过-s
选项。两者产生相同的结果:
basename "${var}" .extension
basename -s .extension "${var}"
如果您事先不知道文件扩展名,则可以尝试grep
字符串的适当部分。
### grep any non-slash followed by anything ending in dot and non-slash
grep -oP '[^/]*(?=\.[^/]*$)' <<< "${var}"