$2: 没有那个文件或目录

$2: No such file or directory

我的代码是:

#!/bin/bash
if [  -gt  ];then
    echo  > 
fi
if [  -eq  ];then
    echo  = 
fi
if [  -lt  ];then
    echo  < 
fi

通过 ./script.sh 3 56 执行脚本时,我得到的响应是 ./script.sh: line 9: 56: No such file or directory。 我有执行脚本的权限。我是 bash 编程和使用 linux 的新手。请告诉我如何修复我的脚本。

echo < 是一种重定向,它会导致 echo 从名称在 </code> 中的文件中读取其输入。由于名为 <code>56 的文件不存在,因此您会收到错误消息。要解决此问题,请引用要打印的字符串:

echo " < "

编辑 欢迎来到 bash 的世界!在您学习的过程中,我建议在变量的所有使用中使用 double-quotes。这将使您预先省去一些麻烦,并且您可以在以后了解不使用引号的情况。参见,例如,this discussion at the bash-hackers wiki。快乐黑客!

Bash 使用 > 将标准输出流重定向到文件(而不是在终端中输出)。同样,它使用 < 从文件中获取标准输入,而不是从您键入(或管道)到终端的内容。

使用引号避免这种特殊处理。变量替换也在双引号字符串上执行,因此您可以将整个输出作为单个参数传递给 echo,如 :

echo " < "

或者您可以传递 3 个参数:

echo  "<" 
# or
echo  '<' 

在single-quoted个字符串中,没有进行变量替换,所以

echo ' < '

不会按预期工作,而是直接输出

<

没有用变量的内容替换变量名。