引数として指定されたファイルよりも新しいディレクトリ内のファイルを表示するスクリプトを作成しようとしていますが、問題が発生しているようです。現在、次の状況です。
for f in *; do
if [["$f" -nt "$1"]]; then
echo "$f"
fi
done
しかし、反復処理中のファイルを参照してコマンドが見つからないというエラーが繰り返し発生します。このスクリプトの問題を修正するにはどうすればよいですか?
答え1
[[
との周りにスペースが必要です]]
for f in *; do
if [[ "$f" -nt "$1" ]]; then
echo "$f"
fi
done
スペースがないと、一連の「コマンドが見つかりません」というエラーが発生します。これは、シェルが という名前でコマンドを検索したが[["$f"
、見つからないためです。実行したいコマンドは です[[
。
代替
ループの必要がなくなります:
find . -maxdepth 1 -newer "$1"
答え2
の後にスペースが 1[[
つ、 の前にもう 1 つスペースが必要です]]
。これは、 からの引き継ぎです。[
は、伝統的に実際の実行可能ファイル ( /bin/[
、 にシンボリックリンクされている) です。ではなく引数を使用して/bin/test
として評価されるように強制するには、スペースが必要でした。[
expression
[expression
は[[
bash キーワードですが、同様の要件があります。
[
また、可能な限り、スクリプト内でPOSIX 互換を使用することをお勧めします。[[
は標準ではないため、すべての POSIX シェルで動作するわけではありません。