嗨我有很多目录,其名称中有空格。我有一些脚本可以在它们上面运行。 这是一个示例脚本
#!/bin/bash
docid='/home/deel/PDF/rant/spr 2008 Shree rose Visheshank'
p=1
while [ $p -lt 117 ]; do
cp $docid/$p.pdf ./
p=$p+1
done
执行上述脚本后,我收到以下错误
cp: cannot stat `/home/deel/PDF/rant/spr': No such file or directory
cp: cannot stat `2008': No such file or directory
cp: cannot stat `Shree': No such file or directory
cp: cannot stat `rose': No such file or directory
cp: cannot stat `Visheshank/1.pdf': No such file or directory
./d2.sh: line 5: [: 1+1: integer expression expected
我尝试过使用双引号“”但结果是一样的。 我应该做些什么改变?
答案 0 :(得分:4)
这一行:
cp $docid/$p.pdf ./
应为:
cp "$docid/$p.pdf" ./
示例:
$ a='abc def'
$ ls $a
ls: abc: No such file or directory
ls: def: No such file or directory
$ ls "$a"
ls: abc def: No such file or directory
算术就像:
p=$[p+1]
示例:
$ p=1
$ q=$[p+1]
$ echo $p $q
1 2
答案 1 :(得分:2)
您需要引用包含带双引号的空格的名称。而且,p=$p+1
没有达到预期的效果。这是纠正的循环:
for p in `seq 116`; do
cp "$docid/$p.pdf" ./
done