了解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”]
为真,但你所写的总是错误的。这个问题与