目录名称中的空格导致错误

时间:2012-01-11 12:02:54

标签: bash shell

嗨我有很多目录,其名称中有空格。我有一些脚本可以在它们上面运行。 这是一个示例脚本

#!/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

我尝试过使用双引号“”但结果是一样的。 我应该做些什么改变?

2 个答案:

答案 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