WTH - コマンドが見つかりません - if文 - bashスクリプト

WTH - コマンドが見つかりません - if文 - bashスクリプト

ifステートメントの間違ったスペースが原因で「コマンドが見つかりません」というエラーが発生する同様の投稿を見たことがあります。

空のエラーが見つかりません。彼らはどこにいますか?また何がありますか?

デフォルトでは、フラグ(以下)なしでtest.shを実行すると、端末は「コマンドが見つかりません」などの失礼なわいせつな音を鳴らし始めます。ロゴを使用すると非常に効果的です。私はbashにフラグを買い続けたくありません。これは長期的な健康に有害です。

この時間はテストファイル:

verbose='false'
aflag=''
bflag=''
sflag=''
files=''
while getopts 'absf:v' flag; do
    case "${flag}" in
        a) aflag='true';;
        b) blag='true' ;;
        s) sflag='true' ;;
        f) files="${OPTARG}" ;;
        v) verbose='true';;
        *) error "Unexpected option ${flag}" ;;
    esac
done

# ======= Below this is where the error gets thrown
if "$sflag" ;
then
  echo "okay" ;
fi
# ======= end error throwing code 

echo "end" # this prints just fine

上記のスクリプトを実行します。

$ bash test.sh

それから私はまた来ます。

test.sh: line 17: : command not found
end

Bashが合理的に行動するように説得する方法についてアドバイスできる人はいますか?

私はMacを使用しています(これが重要かどうかわかりません)。

ベストアンサー1

エラーは、フラグを渡さず、ループwhile getopts全体が実行されないことです。$sflagループは空なので、bashが実際に実行されるのは次のとおりです。

if ""; then echo "okay" ; fi

最も簡単な解決策は、変数をfalseに初期化することです。

verbose='false'
aflag='false'
bflag='false'
sflag='false'
files='false'
while getopts 'absf:v' flag; do
    case "${flag}" in
        a) aflag='true';;
        b) blag='true' ;;
        s) sflag='true' ;;
        f) files="${OPTARG}" ;;
        v) verbose='true';;
        *) error "Unexpected option ${flag}" ;;
    esac
done

# ======= Below this is where the error gets thrown
if "$sflag" ;
then
  echo "okay" ;
fi
# ======= end error throwing code 

echo "end" # this prints just fine

おすすめ記事