[英]Using a variable in a bash script for loop
我的文件夾中有一個包含.pdf數量的文件。 我將這個數字分配給變量fileNum
如下所示:
fileNum=$(ls -l *.pdf | wc -l)
echo $fileNum
返回此數字。 現在,我需要在for循環中使用fileNum
,但遇到了問題。
我的for循環是:
for i in {1..$fileNum} do var=$(awk 'NR=='$i 'pdfs.file') gs \\ -sOutputFile="exgs_"$var \\ -sDEVICE=pdfwrite \\ -sColorConversionStrategy=Gray \\ -dProcessColorModel=/DeviceGray \\ -dCompatibilityLevel=1.4 \\ -dNOPAUSE \\ -dBATCH \\ $var done
在$
之初fileNum
給我的錯誤信息是:
awk:第1行:{或附近的語法錯誤
當我實際使用數字本身(在本例中為17)時,一切都很好。 顯然, awk
不喜歡這樣做是因為……某事……我不知道是什么。 我該怎么辦?
我嘗試了其他形式,例如$(fileNum)
和filenum
,並用單引號引起來。 與弦有關嗎?
我會使用bash讀取文件,而不是每行都運行awk。
while read -r file; do
gs -sOutputFile="exgs_$file" \
-sDEVICE=pdfwrite \
-sColorConversionStrategy=Gray \
-dProcessColorModel=/DeviceGray \
-dCompatibilityLevel=1.4 \
-dNOPAUSE \
-dBATCH \
"$file"
done < pdfs.file
另請參閱http://mywiki.wooledge.org/BashFAQ/001
否則,對於通常要從1迭代到n的情況 ,我將使用C樣式的for循環。
n=10
for (( i=1; i <= n; i++)); do
...
done
這是因為Bash會對變量前的花括號進行擴展。 在這種情況下,您需要使用eval,以便Bash首先擴展變量。
for i in $(eval echo {1..$fileNum})
do
var=$(awk 'NR=='$i 'pdfs.file')
gs \
-sOutputFile="exgs_"$var \
-sDEVICE=pdfwrite \
-sColorConversionStrategy=Gray \
-dProcessColorModel=/DeviceGray \
-dCompatibilityLevel=1.4 \
-dNOPAUSE \
-dBATCH \
$var
done
我寧願寫:
for i in $(seq $fileNum)
do
....
done
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.