[英]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.