使用包含双引号的变量在bash脚本中启动命令

时间:2015-03-04 17:58:57

标签: bash command quotes

我制作了这个非常简单的脚本来说明我的问题

#!/bin/bash
filelist=("\"test 1.jpg\"" "\"test 2.jpg\"")
echo ${filelist[@]:0:2}
ls ${filelist[@]:0:2}|grep 1

问题是bash为我的ls命令添加了单引号:

  

ls'" test' ' 1.JPG"' '"测试' ' 2.JPG"'

而不是:

  

ls" test 1.jpg" "测试2.jpg"

我的原始脚本有一个带引号的文件名数组(以防止空格错误),并且必须启动一个命令(带管道)来处理这些文件。即使使用eval,我也无法找到解决方案。

感谢。

1 个答案:

答案 0 :(得分:3)

不,它不会添加单引号。

set -x输出(我假设您正在查看)使用它们来显示"单词"他们实际上并不存在。

您的问题是您的文件名正在分词。您需要引用数组扩展,除非您的文件名中包含双引号,否则也会删除转义的引号。

尝试:

filelist=("test 1.jpg" "test 2.jpg")
echo "${filelist[@]:0:2}"
ls "${filelist[@]:0:2}"|grep 1