shell 未正确提取文件名根

x3naxklr  于 2023-06-24  发布在  Shell
关注(0)|答案(1)|浏览(107)

我想提取文件名(根)从一个文件与特定的扩展名(.datt)。这个文件是我的目录中唯一的一个文件,但可以更改其根名称,但扩展名保持不变;因此我需要使用一个“通配符”来捕获名称。下面是我的小脚本,它错误地输出了所有文件。感谢你的帮助。

# Target file in the folder >> test.datt
myfile=*.datt
echo $myfile
echo
root="${myfile%.datt}"
echo $root

我的输出

test.datt

temp test.datt testroot

预期产量

test
rbl8hiat

rbl8hiat1#

试试这个Shellcheck-clean代码:

#! /bin/bash -p

myfiles=( *.datt )
echo "${myfiles[0]}"
echo
root=${myfiles[0]%.datt}
echo "$root"
  • 出现问题中的输出是因为echo $myfile等价于echo *.datt$root的值(文字)为*echo $root等价于echo *
  • 对于myfiles=( *.datt ),数组myfiles中填充了与*.datt匹配的文件列表(预期正好是一个)。
  • 有关Bash数组的详细信息,请参阅BashGuide/Arrays - Greg's Wiki

相关问题