簡體   English   中英

bash腳本,使用變量。

[英]bash script, using a variable.

我正在嘗試在路徑中使用輸入變量$ 1

if [ -d "$1" ]; then
   echo "The Directory Exists"  
   files=`find /cygdrive/c/2014-03-19 -name "*ellow.txt"`
   for file in $files; do
   etc...

現在,我不想使用日期,而是使用$ 1(作為用戶輸入的變量)來使用他們想要使用的目錄。 / cygdrive / C / $ 1 但我不認為這在后面的滴答聲中起作用。 有什么建議么? 我已經嘗試為$ 1分配一個變量名,但它仍然是字面意思的相同問題。 我怎么能在這條路徑中使用變量?

干杯小伙子。

在這些情況下肯定會出現擴張。 也就是說,正確使用find是很謹慎的; 很容易做出破壞不尋常文件名的事情,無論這些文件名是由軟件錯誤還是惡意創建的。

if [ -d "/cygdrive/c/$1" ]; then
    while IFS='' read -r -d '' file; do
      something_with "$file"
    done < <(find "/cygdrive/c/$1" -name '*ellow.txt' -print0)
else
    echo "$1 is not a directory" >&2
fi

參考文獻:

是的,變量在反引號中擴展:

> test=foo
> echo `echo $test`
foo

所以你的腳本應該按照書面工作。

但是,通常認為使用$()是更好的做法(除非您需要與不支持該構造的舊平台兼容)。 這幾乎等同於反引號,但它允許嵌套(並且更清晰)。

編輯:雖然這是問題的答案,但Charles Duffy指出了腳本的其他幾個問題。 在一般情況下,這些問題只會影響與“奇”名稱的文件(包括那些空格和的通配符),但如果你的腳本將永遠在這樣的背景下運行的任何可能性,那么這些問題應該予以考慮。 (如果這不僅僅是一次性單會話函數定義,那么,是的,它可能會在您不期望的上下文中重用。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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