
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