Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 整数预期错误…空行?_Bash_If Statement_Integer - Fatal编程技术网

Bash 整数预期错误…空行?

Bash 整数预期错误…空行?,bash,if-statement,integer,Bash,If Statement,Integer,执行以下操作时,我得到一个“整数表达式预期错误”: NM=$(<file) if test $NM -gt 0 then echo "workflow 1 would follow here" else if test $NM -lt 0 then echo "workflow 2 would go after this" else echo "something else" fi fi NM=$(您要测试的${NM}大于零(例如$NM中的字符数)。当前您正在根据0测试字符串的内容,b

执行以下操作时,我得到一个“整数表达式预期错误”:

NM=$(<file)
if test $NM -gt 0 
then
echo "workflow 1 would follow here"
else
if test $NM -lt 0
then
echo "workflow 2 would go after this"
else
echo "something else"
fi
fi
NM=$(您要测试的
${NM}
大于零(例如
$NM
中的字符数)。当前您正在根据
0
测试字符串的内容,bash告诉您它需要一个数字。这同样适用于需要数字的每个测试

如果要测试单词
“$NM”
是否大于
0
或小于
0
请使用
If((NM>0));然后…
If((NM<0));然后…


您也可以使用较旧的
test
表达式
if[“$NM”-gt 0];然后…
如果test“$NM”-gt 0;然后…
请注意,如果
“$NM”
不能解释为数字,您将生成错误。(您可以重定向
stderr
以避免这种情况,但这并不明智).

在阅读了一些评论之后,我想知道您是否得到了一些不可打印的字符。我通过在\n之前添加一个\r来测试这一点,它最终能够复制。这是您的代码的清理版本,使用tr删除一些额外的字符

NM=$(tr -cd '[:graph:]' <file)

if [[ $NM -gt 0 ]]; then
   echo "workflow 1 would follow here"
elif [[ $NM -lt 0 ]]; then
   echo "workflow 2 would go after this"
else
   echo "something else"
fi

NM=$(tr-cd'[:graph:'这有点奇怪。你能添加
echo-n“$NM”的输出吗| hextump-C
刚读完?我很好奇你在说什么循环。是有循环,还是你把你的条件语句称为循环?我终于能够重现并解决你的问题。答案如下,请记住在你的问题解决后选择一个答案。他也没有加载文件的内容是的,我看到了这一点,并添加了第二组测试。
$(
$(cat file)相同(且速度更快)
,请参见。我明白了——我的错误是我的测试文件中已经有一个hexdump,所以我认为它像'exec 3>$file'一样工作,解决了这个问题。谢谢!我必须承认,有点生疏,我从来没有想过使用tr