これは私のスクリプトです。
#!/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では、プロセス置換(
<( ... )
)および拡張テスト構文は[[ ... ]]
使用できません。 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