シェルのifステートメントで複数の条件を組み合わせて、組み合わせを否定したい。条件の単純な組み合わせのための次の作業コードがあります。
if [ -f file1 ] && [ -f file2 ] && [ -f file3 ] ; then
# do stuff with the files
fi
これは正常に機能します。無効にする場合は、次の作業コードを使用できます。
if ! ( [ -f file1 ] && [ -f file2 ] && [ -f file3 ] ) ; then
echo "Error: You done goofed."
exit 1
fi
# do stuff with the files
これも期待どおりに機能します。しかし、括弧が実際に何をしているのかわからないことがわかりました。私がしたいだけのグループ化のためにそれらを使用するが、それは実際にサブシェルを産卵されましたか?(どうすればわかりますか?)その場合、サブシェルを生成せずに条件をグループ化する方法はありますか?
if [[ ! -f file1 ]] && [[ ! -f file2 ]]; then
if [ ! 1 -eq 2 ] && [ ! 2 -eq 3 ]; then echo yep; fi
しましたが、動作します。私はいつも習慣として二重中括弧でテストを書いています。また、そうでないことを確認するためにbash
、さらにテストしましたがif /bin/test ! 1 -eq 2 && /bin/test ! 2 -eq 3 ; then echo yep; fi
、そのように動作します。
[ ! -e file/. ] && [ -r file ]
ディレクトリをドロップします。あなたが好きなようにそれを否定します。もちろん、そういうこと-d
です。
if ! [ -f file1 ] || ! [ -f file 2 ] || ! [ -f file3 ] ; then
が、より一般的な答えが必要です。