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