[英]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
參考文獻:
$(find ...)
不足) < <(...)
構造的需要) 是的,變量在反引號中擴展:
> test=foo
> echo `echo $test`
foo
所以你的腳本應該按照書面工作。
但是,通常認為使用$()
是更好的做法(除非您需要與不支持該構造的舊平台兼容)。 這幾乎等同於反引號,但它允許嵌套(並且更清晰)。
編輯:雖然這是問題的答案,但Charles Duffy指出了腳本的其他幾個問題。 在一般情況下,這些問題只會影響與“奇”名稱的文件(包括那些空格和的通配符),但如果你的腳本將永遠在這樣的背景下運行的任何可能性,那么這些問題應該予以考慮。 (如果這不僅僅是一次性單會話函數定義,那么,是的,它可能會在您不期望的上下文中重用。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.