了解Unix中的错误消息

了解Unix中的错误消息,unix,Unix,我有以下代码: # 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文件扩展到多个 word和if失败 此错误消息的含义是什么?命令的=运算符将单个字作为其左操作数,将单个字作为其右操作数 变量$files包含多个文件的名称,因此它可以扩展

我有以下代码:

# 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文件扩展到多个 word和if失败


此错误消息的含义是什么?

命令的
=
运算符将单个字作为其左操作数,将单个字作为其右操作数

变量
$files
包含多个文件的名称,因此它可以扩展为多个单词

添加引号以将其视为单个单词:

if [ "a1 a2" = "$file" ]
但正如乔纳森·莱夫勒(Jonathan Leffler)的评论正确指出的那样,这仍然行不通;它避免了语法错误,但它永远不会匹配,因为
“$file”
按字面意思扩展为
“a*”

有一种相当复杂的方式来做你似乎想做的事情:

if [ "a1 a2" = "$(eval echo $file)" ]
由于
$file
不是引号,因此它扩展为
a*
,然后扩展为
a1a2
,即多个单词。
$(命令)
构造可以用双引号括起来,将其从多个单词转换为单个单词

我一点也不确定这是做你想做的事情的最好方式


(我应该提到的是,你接受了这个答案,但它仍然是不正确的。你应该在这么做之前尝试一下。我认为现在它是正确的。)

使用
“$file”
,将不会有任何元字符扩展,因此
如果[“a*”=“$file”]
为真,但你所写的总是错误的。这个问题与