我有以下代码:
# The current working directory
# contains the files a1 a2 b c
files="a*"
if [ "a1 a2" = $files ]
then
echo match
else
echo $files
fi
我得到的错误信息是$ fi les扩展到多个 字和if如果失败。
此错误消息的含义是什么?
答案 0 :(得分:1)
=
命令的[ ... ]
运算符将一个单词作为其左操作数,将一个单词作为其右操作数。
您的变量$files
包含多个文件的名称,因此它会扩展为多个单词。
添加引号将其视为一个单词:
if [ "a1 a2" = "$file" ]
但正如Jonathan Leffler的评论正确指出的那样,那仍然行不通;它避免了语法错误,但它永远不会匹配,因为"$file"
从字面上扩展到"a*"
。
有一种相当复杂的方式去做你似乎想做的事情:
if [ "a1 a2" = "$(eval echo $file)" ]
由于$file
不是引号,它会扩展为a*
,然后展开为a1 a2
,这是多个单词。 $(command)
构造可以用双引号括起来,将它从多个单词转换为单个单词。
我完全不确定这是你做的事情的最佳方式。
(我应该提到你接受了这个答案,但它仍然是不正确的。你应该在做之前尝试过。我认为现在这是正确的。)