为什么我收到“太多争论”

Aar*_*ron 4 shell-script test arguments

这是我的脚本的一部分,它告诉我第 3 行的参数太多:

#!/bin/bash
export LC_ALL='C'
if [ `echo "*file 2" | grep -o ^.` = '.' ]
then
    echo success
fi
Run Code Online (Sandbox Code Playgroud)

有人知道为什么吗?据我所知,我只是比较两个参数,“*”和“。”

Gil*_*il' 7

echo "*file 2" | grep -o ^.打印*

由于您在双引号外有一个命令替换,它会经历通配符(又名通配符匹配,又名文件名生成)和分词。如果当前目录不为空,则*扩展到当前目录中的文件列表。每个文件都成为[命令中的一个标记,这很可能是语法错误。

问题是您没有在命令替换周围使用双引号。除非有充分的理由省略它们,否则始终在变量和命令替换周围使用双引号

if [ "$(echo "*file 2" | grep -o ^.)" = '.' ]
Run Code Online (Sandbox Code Playgroud)

请参阅为什么我的 shell 脚本会因空格或其他特殊字符而阻塞?以获得更详细的解释。