簡體   English   中英

用* 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 ;不帶雙引號的任何一種方式)將擴展本身視為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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM