2美元:没有这样的文件或目录

时间:2017-01-14 13:11:37

标签: bash io-redirection quoting

我的代码是:

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

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

2 个答案:

答案 0 :(得分:6)

echo $1 < $2是一个重定向,导致echo从名为$2的文件中读取其输入。由于名为56的文件不存在,您将收到错误消息。要解决此问题,请引用要打印的字符串:

echo "$1 < $2"

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

答案 1 :(得分:3)

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

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

echo "$1 < $2"

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

echo $1 "<" $2
# or
echo $1 '<' $2

在单引号字符串中,不执行变量替换,因此

echo '$1 < $2'

不会按预期工作,而是按字面输出

  

$ 1&lt; $ 2

不用变量'content替换变量名。