我制作了这个非常简单的脚本来说明我的问题
#!/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,我也无法找到解决方案。
感谢。
答案 0 :(得分:3)
不,它不会添加单引号。
set -x
输出(我假设您正在查看)使用它们来显示"单词"他们实际上并不存在。
您的问题是您的文件名正在分词。您需要引用数组扩展,除非您的文件名中包含双引号,否则也会删除转义的引号。
尝试:
filelist=("test 1.jpg" "test 2.jpg")
echo "${filelist[@]:0:2}"
ls "${filelist[@]:0:2}"|grep 1