我在变量中有一个文件名(包括扩展名,但不包括完整路径名)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