如何将双引号(“)附加到var的末尾

时间:2013-04-03 05:17:54

标签: linux bash append quote

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

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

等...

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

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

等...

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

dnam=$(dirname $1)

这有用......到了一定程度。最终的结果是我的最后一个双引号也被切断了,结果是:

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

等...

我需要最后的引用才能转移到实际的重命名部分,并且无法弄清楚如何去做。我敢肯定,这是一件很简单的事情。有人可以请我填一下吗?

3 个答案:

答案 0 :(得分: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[@]}"

答案 1 :(得分:1)

乍一看,似乎你需要添加反斜杠来逃避脚本中的双引号。

答案 2 :(得分:0)

不需要子shell的较短版本:

dnam=${1%/*}\"

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