这是我的脚本:
#!/bin/sh
result=$((diff <(sort 1.txt) <(sort 2.txt)))
if [[ $result != "" ]]
then
echo ERROR
else
echo PASS
fi
执行此脚本时出现错误:
chk.sh: line 3: diff <(sort 1.txt) <(sort 2.txt): missing `)' (error token is "1.txt) <(sort 2.txt)")
原因是什么以及如何解决?
答案1
几点:
- 进程替换 (
<( ... )
) 和扩展测试语法[[ ... ]]
在 sh 中不可用。您需要更高级的 shell,例如 bash 或 ksh。 $(( ... ))
是算术替换,不是命令替换。你需要$( ... )
这里。diff
您可以diff
直接在条件中检查退出状态,而不是检查 的输出if
。您可以丢弃未使用的输出。 (所以你甚至不需要命令替换或[[ ... ]]
在这里。)
以及评论中的建议:
if
您可以通过交换if
和else
块来避免否定条件cmp -s
如果您只想检查文件是否不同,则可以使用同样高效的命令。
综合:
#!/bin/bash
if cmp -s <(sort 1.txt) <(sort 2.txt)
then
echo PASS
else
echo ERROR
fi