用* shell bash读取文件名

时间:2015-02-20 14:38:27

标签: linux bash shell variables filenames

我是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缺乏了解,我无法找到它。那么有人可以说出错了吗?

谢谢!扬

2 个答案:

答案 0 :(得分:2)

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##*/}"

答案 1 :(得分:0)

pwd
/usr/local/src

ls -1 /usr/local/src/mysql*
    /usr/local/src/mysql-cluster-gpl-7.3.4-linux-glibc2.5-x86_64.tar.gz
    /usr/local/src/mysql-dump_test_all_dbs.sql

如果您只有1个文件,则只能获得1个结果

MyFile=`ls -1 /home/led/LED*`