gpt4 book ai didi

linux - 使用 * shell bash 读取文件名

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:09:59 24 4
gpt4 key购买 nike

我是 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com