这是我的脚本的一部分,它告诉我第 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 脚本会因为空格或其他特殊字符而卡住?以获得更详细的解释。