"="記号の前後の単語

ユーザー入力に応じて、=記号の前後に単語を表示するコードを作成しようとしています。たとえば、ユーザーが入力すると、Name=john出力は次のようになります。

The variable is called: Name

The variable value is: john

=記号の後に値がない場合

The variable is called: Name

The variable value is:

Invalid entry

ユーザー入力は次の変数に保存されます。setting

echo -e "The variable name of the setting is:" $setting | cut -d "=" -f1

value=$setting

echo -e "The variable value of the setting is:" $value | cut -d "=" -f2
    
case $value in
    
"") echo "Invalid setting"
    
esac

break

grepを使ってみましたが、同じ問題が発生しました。 2行目のテキストは表示されません。つまり、空の行、またはこの場合はjohnという単語のみが使用されます。

ベストアンサー1

これをvalueフルユーザー入力に設定してsettingから文字列を切り取りechoますが、何も変更されないため、空であることをvalueテストしても文字列全体が含まれます。

代わりに変数拡張を提案しますcut

printf '%s\n' "The variable name of the setting is: ${setting%%=*}"
value="${setting#*=}"
printf '%s\n' "The variable value of the setting is: $value"
case $value in
  "") echo >&2 "Invalid setting";;
esac

おすすめ記事