如何在shell脚本中获取文件的扩展名

vij*_*had 11 linux shell

我试图在shell脚本中获取文件的文件扩展名.但没有任何运气.

我正在使用的命令是

file_ext=${filename##*.}
Run Code Online (Sandbox Code Playgroud)

file_ext = $filename |awk -F . '{if (NF>1) {print $NF}}'
Run Code Online (Sandbox Code Playgroud)

但是这两个命令都没能将值放在变量file_ext中.但是,当我尝试

echo $filename |awk -F . '{if (NF>1) {print $NF}}'
Run Code Online (Sandbox Code Playgroud)

它给了我想要的结果.我是shell脚本的新手.请描述发生的情况.而且我该怎么办呢?

谢谢.

gho*_*g74 22

要获取文件扩展名,只需使用shell即可

$ filename="myfile.ext"
$ echo ${filename##*.}
ext
$ file_ext=${filename##*.} #put to variable
$ echo ${file_ext}
ext
Run Code Online (Sandbox Code Playgroud)

  • 是的,但为什么这有效?这是什么?##*.`voodoo? (2认同)
  • 大声笑@ Okonomiyaki3000,bash 脚本对我来说主要是巫毒教XD。这是有效的,因为 `{var##somepattern}` 是一个参数。`##somepattern` 本质上是从 var 中删除模式,因此它删除了点之前的所有内容。一个问题是,如果找不到模式,则返回整个字符串(这可能是可取的,也可能是不可取的,在我的情况下,我想在不存在扩展名时返回一个空字符串)。这是一篇关于参数替换的好文章:https://www.cyberciti.biz/tips/bash-shell-parameter-substitution-2.html (2认同)

Enr*_*sso 13

太空伤害.

无论如何你应该这样做:

file_ext=$(echo $filename |awk -F . '{if (NF>1) {print $NF}}')
Run Code Online (Sandbox Code Playgroud)

这将在$ file_ext中存储命令的输出.