すべてのフォルダを印刷する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" ~/*
答え2
努力する:
if [ "$f" = '/home/sk/.' ] || [ "$f" = '/home/sk/..' ]
答え3
あなたの質問に対する直接的な答えではありませんが、条件はPOSIX仕様で*
拡張されていないため、不要です。.
..
また、すべてのフォルダを印刷したいと言われたので、末尾の/
フォルダを指定する必要があります。
したがって、このような内容は、隠されたディレクトリではなく、すべてのディレクトリを印刷するのに十分です。
for d in ~/*/
do
[ -d "$f" ] && printf "%s\n" "${d%/}"
done
ディレクトリエントリのテストを参照してください。それ以外の場合は、ディレクトリがない場合はパターンが印刷されます。パターンによる汚れを除去する${d%/}
ために使用されます。/