すべてのフォルダを印刷する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
if
bashとzshの両方では、デフォルトではドットファイルは無視されます。簡単に次のように書くことができます。
for f in ~/*; do echo "$f"; done
でも
printf "%s\n" ~/*