if [ ! -f ./* ]; then
for files in $(find . -maxdepth 1 -type f); do
echo $files
else
echo Nothing here
fi
これまで予期しないトークン「`他
新しい近く
構文エラー。誰かが私が間違ったことを私に指摘することはできますか?
if [ ! -f ./* ]; then
for files in $(find . -maxdepth 1 -type f); do
echo $files
else
echo Nothing here
fi
これまで予期しないトークン「`他
新しい近く
構文エラー。誰かが私が間違ったことを私に指摘することはできますか?
あなたは忘れましたdone
!
if [ ! -f ./* ]; then
for files in $(find . -maxdepth 1 -type f); do
echo $files
done
else
echo Nothing here
fi
"のために" の構文は
あるため:NAMEための[WORDSで...;]ないコマンド。
行わあなたは
はところで、あなたは小文字ではなく、ECHOでエコーを意味するのですか?
if [ ! -f ./* ]; then
for files in $(find . -maxdepth 1 -type f); do
echo $files
done
else
echo Nothing here
fi
を試してみて "完了" を欠けていますか
'BTW、ECHOではなく小文字でエコーしたのですか?ありがとう – Mechaflash
構文エラーが発生する理由は、ループが「完了」ステートメントで終了していないためです。この場合、forループの代わりにwhileループを使用してください。ファイル名のいずれかにスペースや改行が含まれていると、forループが壊れます。
また、globが複数のファイルに展開されると、発行したtestコマンドでも構文エラーが発生します。ここで
$ [ ! -f ./* ]
bash: [: too many arguments
がディレクトリのすべてのファイルが含まれているかどうかを確認するためのより良い方法です:
を: もfiles=(./*) # populate an array with file or directory names
hasfile=false
for file in "${files[@]}"; do
if [[ -f $file ]]; then
hasfile=true
break
fi
done
if $hasfile; then
while read -r file; do
echo "$file"
done < <(find . -maxdepth 1 -type f)
fi
あなたはGNU見つけた場合は、あなたは、単に検索-printとwhileループを置き換えることができます
if $hasfile; then
find . -maxdepth 1 -type f -print
fi
あなたは私のファイルチェックについて正しいです。私もそれを変更します。 – Mechaflash
私は投票しませんでしたが、最後のエコーには1つの引用符があります。 –
全く別の問題で質問を変更しないでください。あなたはすでに3つの答えがあり、あなたは「済んでいません」と言いました。あなたのコードは実際にはあまり意味がありません。あなたが存在しない場合、ディレクトリにcdしたいですか?なぜあなたはファイルの最初の行を読むことはファイル名を与えることを期待するのですか? – jordanm
@jordanm 'これに新しくなりました。 nvrは昨日までシェルスクリプトを書いていました。なぜなら私の上司はサーバー上に作成されたスクリプトと元々はそれをやめる人を必要としていたからです。私はここで試しています=/ – Mechaflash