理解Unix中的错误消息

时间:2014-02-02 02:21:31

标签: 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 les扩展到多个 字和if如果失败。

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

1 个答案:

答案 0 :(得分:1)

=命令的[ ... ]运算符将一个单词作为其左操作数,将一个单词作为其右操作数。

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

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

if [ "a1 a2" = "$file" ]

但正如Jonathan Leffler的评论正确指出的那样,那仍然行不通;它避免了语法错误,但它永远不会匹配,因为"$file"从字面上扩展到"a*"

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

if [ "a1 a2" = "$(eval echo $file)" ]

由于$file不是引号,它会扩展为a*,然后展开为a1 a2,这是多个单词。 $(command)构造可以用双引号括起来,将它从多个单词转换为单个单词。

我完全不确定这是你做的事情的最佳方式。

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