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

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

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

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

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

答案1

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

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

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

if [ "$(echo "*file 2" | grep -o ^.)" = '.' ]

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

相关内容