2

警告: これは、特定のマシンの問題か、GNU bash の問題である可能性があります。バージョン 4.2.37(1)-release (x86_64-pc-linux-gnu) は、さらに確認すると更新されます。

更新 1: GNU bash バージョン 4.2.39 で動作します。および GNU bash、バージョン 4.2.24

私は質問をするbashスクリプトに取り組んでいます。ワイルド カード if ステートメントを使用することを望んでいましたが、ユーザーが no または n だけを入力したかどうかを確認しましたが、何らかの理由で機能していないようです。

echo 'Is this a Personal Project? [y/n]'
    read ORG_SWITCH
echo 'Do you want to Open Source this project? [y/n]'
    read PRIVATE

そしてここにif文があります

if [[ $ORG_SWITCH == *"n"* ]] ; then
    if [[ $PRIVATE == *"n"* ]] ; then

出力されるエラーは [[: 見つかりません [[: 見つかりません]

理由はわかりません。私はこれを見ましたが、そこでいくつかの解決策を試しましたが、何が起こっているのか理解していないだけかもしれません.

お気軽にご相談ください。

4

2 に答える 2

0

とを使用せずに、ユーザー入力を1文字(または)に制限read -n1 -p "Is this a Personal Project? [y/n] " ORG_SWITCHするために使用できます。また、ペアなしで状態をテストできます。echoyn[[ ]]

read -n1 -p "Is this a Personal Project? [y/n] " ORG_SWITCH 
read -n1 -p "Do you want to Open Source this project? [y/n] " PRIVATE

if [ "$ORG_SWITCH" = "n" ]; then 
    if [ "$PRIVATE" = "n" ]; then 
        echo "double no"
    fi
fi

1つの角かっこ条件([ ])では、変数を常に二重引用符で囲むため、変数が空であると評価された場合でも、コードで構文エラーが発生することはありません。

于 2013-01-24T18:05:37.310 に答える
0

このコードはGNU bash, version 4.2.24

#!/bin/bash
echo 'Is this a Personal Project? [y/n]'
read ORG_SWITCH

if [[ $ORG_SWITCH == *"n"* ]] ; then
    echo "True $ORG_SWITCH"
else
    echo "False $ORG_SWITCH"
fi

echo 'Do you want to Open Source this project? [y/n]'
read PRIVATE
if [[ $PRIVATE == *"n"* ]] ; then
    echo "True $PRIVATE"
else
    echo "False $PRIVATE"
fi

これが出力です

Is this a Personal Project? [y/n]
no
True no
Do you want to Open Source this project? [y/n]
no
True no

何か不足していますか?

于 2013-01-24T18:17:22.190 に答える