我正在嘗試做一個功能,將使我的生活更容易將圖像轉換為pdf。我使用的是img2pdf
,這是一個Python腳本。我希望能夠將文件和目錄傳遞給我的函數(帶有擴展的wild標記,如:directory/*
)。
我解決了Windows路徑轉換的問題,但是現在意識到如果路徑有空格,函數就不起作用了,或者Python會在路徑選擇上出錯。
我嘗試編寫函數,生成一個包含所有文件的字符串:
imgtopdf(){
list=""
while [[ "$1" != "" ]] ; do
list+=" '$(cygpath -w "$1")'" # Tried $(echo "$list" | xargs -0 echo) but it removes back-slashes!
shift
done
list="${list:1}"
echo $list
img2pdf -o img2pdf.pdf --pagesize A4 $list
}
然后嘗試使用數組保存所有文件:
imgtopdf(){
list=()
while [[ "$1" != "" ]] ; do
list+="$(cygpath -w "$1")"
shift
done
echo ${list[@]}
img2pdf -o img2pdf.pdf --pagesize A4 ${list[*]}
}
注意:cygpath -w
負責將/cygdrive/path轉換為Windows路徑,以便Python理解路徑。
引用是至關重要的:使用
"${list[@]}"
,而不是${list[*]}
。冒著self-serving的風險,見https://stackoverflow.com/a/12316565/7552另外,將元素附加到數組的語法需要括號(額外的空格是可選的):
bash中檢查變量的最佳方法是使用
declare -p list