[英]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
;不帶雙引號的任何一種方式)將擴展本身視為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*`
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.