使用 * shell bash 读取文件名
Read filename with * shell bash
我是 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
;没有双引号的任何一种方式)将导致 expansion 本身被视为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##*/}"
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*`
我是 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
;没有双引号的任何一种方式)将导致 expansion 本身被视为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##*/}"
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*`