0

我正在重命名一堆包含空格的文件和目录。我有一个目录列表,例如:

"/usr/home/name/directory a/"
"/usr/home/name/directory b/"

ETC...

它们都用双引号括起来,这样我就可以使用 for 循环来处理它们。那部分工作正常。问题是我也有类似的文件:

"/usr/home/name/directory a/file a"
"/usr/home/name/directory b/file b"

ETC...

我需要验证文件所在的目录是否可写。所以要做到这一点,我从字符串中获取目录名,如:

dnam=$(dirname $1)

这有效......在一定程度上。最终结果是我的最后一个双引号也被切断了,导致:

"/usr/home/name/directory a
"/usr/home/name/directory b

ETC...

我需要最后的报价才能进入实际的重命名部分,但不知道该怎么做。我确定这是我忽略的简单事情。请问有人可以填我吗?

4

3 回答 3

2

为了安全起见,请使用:

dnam=$(dirname "$1")

在变量周围加上双引号。

您可以使用以下命令在该结果上附加双引号:

dnam=$(dirname "$1")'"'

或许多等效的符号。但是,我怀疑您应该以不同的方式处理名称,而值中没有双引号。也就是说,您可能有:

dir1="/usr/home/name/directory a"
file1="$dir1/file a"

然后当您需要将其中一个传递给命令时,将其括在双引号中:

dnam=$(dirname "$file1")

cd "$dnam"

如果您正在处理此类名称的列表,请使用数组,然后使用以下符号:

a=( "$dir1" "$dir2" )

ls -ld "${a[@]}"
于 2013-04-03T05:26:54.957 回答
1

乍一看,您似乎需要添加反斜杠来转义脚本中的双引号。

于 2013-04-03T05:26:44.157 回答
0

不需要子外壳的较短版本:

dnam=${1%/*}\"

参数替换与实用程序 dirname 具有相同的效果。它适用于路径中的空白。最后的报价只需要转义即可。

于 2013-04-03T10:02:41.557 回答