次のスクリプトの場合:
for f in $FILES
do
fname="$(basename "${f}")"
fn="${fname:6:2}"
if [["$fn" == "01"]]; then #error here
echo "yes"
fi
done
答え1
かなり単純な構文問題があります。以下のように、テスト構造の前後にスペースを追加します。
if [[ "$fn" == "01" ]]; then ...
動作する必要があります。
その理由は[[
実際には次のとおりです。bash
キーワードは演算子ではないので、「独立して」配置する必要があります(etc.に似ていますif
)。
ファイルの1つの名前はです01
。構文を使用すると、シェルはキーワードを確認し、if
その後に戻りコードが計算されるコマンドが来ると予想します。あなたのコードでは[[01
コマンドと見なされますが、コマンドは存在しないようです。これはエラーメッセージの原因でもあります。
シェルスクリプトについてもっと詳しく知りたいbash
(またはksh
)(演算子をテストするために二重括弧を使用して表示されます)を使用しているように思われる場合は、次の点を確認してください。強打ガイド(@terdonの提案に基づいています)そして後で高度なバッシュスクリプトガイド(時々含まれているあまりよくない慣行のために「鍛えられた」場合)詳細情報を確認してください。