[英]spaces in bash scripts
因此,我已經嘗試了一段時間,但這確實行不通。 我正在嘗試編寫一個腳本,該腳本將許多pdf文件連接成一個腳本,而沒有在命令行界面中指定它們的繁瑣工作(它們都具有相似的名稱)。
#!/bin/bash
i=1
list="science.pdf"
outputfile="file.pdf"
while [ $i -le 3 ]; do
file="science (${i}).pdf"
list="$list $file"
let i=i+1
done
pdftk $list cat output $outputfile
這是我的輸出:
sean@taylor:~/Downloads/understanding/s0$ ./unite.sh
Error: Failed to open PDF file:
science
Error: Failed to open PDF file:
(1).pdf
Error: Failed to open PDF file:
science
Error: Failed to open PDF file:
(2).pdf
Error: Failed to open PDF file:
science
Error: Failed to open PDF file:
(3).pdf
Errors encountered. No output created.
Done. Input errors, so no output created.
我認為腳本以某種方式認為應該在有空格的任何地方拆分文件,但是我已經嘗試了在空格(\\)之前使用反斜杠以及在文件名兩邊加上引號(\\“)都無濟於事。
有人可以幫忙嗎?
不要將文件名附加到字符串中。 改用數組:
i=1
list=( "science.pdf" )
outputfile="file.pdf"
while [ $i -le 3 ]; do
file="science (${i}).pdf"
list+=( "$file" )
let i=i+1
done
pdftk "${list[@]}" cat output $outputfile
您還可以使用如下所示的for循環進一步簡化腳本:
list=( "science.pdf" )
for (( i=1; i<=3; i++ )); do
file="science (${i}).pdf"
list+=( "$file" )
done
pdftk "${list[@]}" cat output $outputfile
當您執行最終命令時
pdftk $list cat output $outputfile
$ list變量不再被引用,即實際執行的是
pdftk science.pdf science (1).pdf ... science (3).pdf cat output file.pdf
您需要超級引用$ list變量。 嘗試:
while [ $i -le 3 ]; do
file="science (${i}).pdf"
list="$list \"$file\""
let i=i+1
done
您可能需要使用其他連接變量的方法,因為循環可能會連續取消對先前連接值的引用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.