if [ -n $diffCurr ] 错误:参数太多

Jie*_*eng 4 diff test

我已经使用以下代码一段时间了,但现在出现错误

java Editor < "input/editor$i.in" > "tmp/editor$i.out"
diffCurr="$(diff "tmp/editor$i.out" "output/editor$i.out")"
if [ -n $diffCurr ]
Run Code Online (Sandbox Code Playgroud)

错误(发生在上述代码段的最后一行):

[: 争论太多

怎么了?我正在尝试测试差异结果是否为空(即文件中的相同内容)

jw0*_*013 13

无需将 的输出放入diff变量中,因为您可以根据 的退出状态判断文件是否不同diff,例如

if diff -q file1 file2 >/dev/null 2>&1; then
        # files are equal
else
        # files differ, or an error occurred
fi
Run Code Online (Sandbox Code Playgroud)

diff0如果文件没有不同,则返回成功 ( )。根据需要调整逻辑。

在可能的情况下测试命令的退出状态几乎总是优于通过命令替换检查或解析输出。

为了完整起见,您的原始示例出现错误是因为您没有"$diffCurr"在该if行中引用,因此它经历了“单词拆分”成多个单词——因此“参数太多”。

  • 如果你只对输出感兴趣,你可以用 `cmp` 替换 `diff` ... (3认同)

小智 10

jw013 是对的,反正你不需要这条线。

但是为了回答实际问题,您在传入的变量test(也称为[)周围省略了引号。

这意味着如果您的变量是空的,就好像您没有参数(例如[ -n ]),如果您的变量包含空格,则好像您传递了多个参数(我猜这就是发生的情况)。

始终test用引号将字符串括起来,例如:

if [ -n "$myvar" ]
Run Code Online (Sandbox Code Playgroud)