在参数扩展中提取字符串的最后十个字符(例如文件名)

在参数扩展中提取字符串的最后十个字符(例如文件名)

我在变量中有一个文件名(包括扩展名,但不包括完整路径名)file,并且我只想从参数扩展中获取基本名称的最后 10 个字符。

示例:file包含文件名A_text_document_1234567890.txt.

期望的输出:1234567890.

我知道我可以用来${file%.*}删除扩展名:echo ${file%.*}outputs A_text_document_1234567890

如果我这样做了base=${file%.*},那么我就可以使用${base: -10}get 1234567890。我可以在参数扩展中一步完成此操作而不使用第二个变量吗?

我想我真正的问题是,如何将这两个参数扩展合并为一个?

答案1

file=abcdefghijklm
echo ${file: -10}
defghijklm

冒号后需要空格来区分参数扩展和${var:-default}变体。


使用第二个变量:

$ tmp=${file%.*}; echo "${tmp:(-10)}"
1234567890

使用正则表达式:

$ [[ $file =~ (.{10})(\.[^.]*)?$ ]] && echo "${BASH_REMATCH[1]}"
1234567890

相关内容