zshの単一の角かっこ内の文字列の比較

zshの単一の角かっこ内の文字列の比較

すべてのフォルダを印刷するBashコード:

for f in ~/*;
do
if [ $f  == '/home/sk/.' -o $f  == '/home/sk/..' ]; then
       true
  else
     echo "$f"
  fi
done

それはbashで動作します。 z シェルでコードを実行するとエラーが発生します。

 = not found

その後、zシェルでこのエラーを回避するために、[に変換してzシェルで実行しました。次のエラーが発生します。[[]]]

condition expected: $f

[[andを使用すると、]]bashもエラーを発生させます。

syntax error in conditional expression
syntax error near `-o'

シェル全体で動作するシェルの文字列比較のためのPOSIX標準はありますか?

ベストアンサー1

これにはあらゆる種類の問題があります。まず、==標準ではありません。 POSIX方式は=同様に適用されます-o。これはbashとzshでも動作します。

for f in ~/*;
do
if [ "$f"  = '/home/sk/.' ] || [ "$f"  = '/home/sk/..' ]; then
       true
  else
     echo "$f"
  fi
done

ifbashとzshの両方では、デフォルトではドットファイルは無視されます。簡単に次のように書くことができます。

for f in ~/*; do echo "$f"; done

でも

printf "%s\n" ~/*

おすすめ記事