我是 Linux 新手,我想编写一个 bash 脚本,该脚本可以读取以 LED + 一些数字开头的目录的文件名。(例如:LED5.5.002)
在该目录中只有一个以 LED 开头的文件。问题是这个文件每次都会更新,所以下一次会是例如 LED6.5.012 和计数。
我进行了一些搜索和尝试,得出了这个解决方案:
export fspec=/home/led/LED*
LedV=`basename $fspec`
echo $LedV
如果我在我的终端中一个一个地输入这些命令,它工作正常,LedV= LED5.5.002 但如果我在 bash 脚本中运行它,它会给出结果:LedV = LED*
我搜索另一个解决方案:
a=/home/led/LED*
LedV=$(basename $a)
echo $LedV
但这里又是一样的,如果我一个一个地给出它没关系,但在一个脚本中:LedV = LED*。
它可能很小,但由于我对 Linux 缺乏了解,我无法找到它。那么有人可以告诉我哪里出了问题吗?
谢谢!简
最佳答案
Shell 扩展不会发生在标量赋值上,所以在
varname=foo*
"$varname"
的扩展字面意思是 "foo*"
。当您认为 echo $varname
(或者在您的情况下 basename $varname
;无论哪种方式都没有双引号)会导致扩展 本身被视为一个 glob,因此您可能认为该变量包含所有这些文件名。
数组扩展是另一回事。你可能只是想要
fspec=( /path/LED* )
echo "${fspec[0]##*/}" # A parameter expansion to strip off the dirname
这对 bash 来说效果很好。由于 POSIX sh 没有这样的数组,我想提供一种替代方法:
for fspec in /path/LED*; do
break
done
echo "${fspec##*/}"
关于linux - 使用 * shell bash 读取文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28631518/