【发布时间】:2020-07-21 20:13:08
【问题描述】:
我编写了这段代码来创建一个包含我的图像的数组:
listOfImages=(`find . -iname "*.png" 2>/dev/null`)
但是路径中可能有空格,所以我必须用双引号将每个元素括起来:
listOfImages=(`find . -iname "*.png" 2>/dev/null | sed -E -e 's/(.*)/"\1"/'`)
通常当我们打印一个数组的元素时,它不应该打印双引号,例如:
x=("a" "b")
for i in ${x[@]}
do
echo "$i"
done
然后打印出来:
a
b
但是在我的图像数组上,它会打印双引号,这会导致我脚本中的以下代码出现问题。
演示:
for i in ${listOfImages[@]}
do
echo $i
done
然后打印出来:
"blocks/glass.png"
"blocks/glass_black.png"
【问题讨论】:
-
mapfile -t -d '' listOfImages < <(find . -iname '*.png' -type f print0),也引用你的变量,"${listOfImages[@]}"不是${listOfImages[@]} -
您还需要引用数组用途 (
for i in "${x[@]}") -
@Shayan :但是当您在
sed命令1 中执行"\1"时,您自己已将双引号放在那里 -
@user1934428 我还在这一行加上了双引号:
x=("a" "b")但它们没有被打印出来,明白吗? -
这完全不同。您的 sed 命令已用单引号括起来,但在这里您没有。如果您写了
x=('"a"' "b"),您会看到a周围的双引号,但不会看到b。