入力変数からの値の導出

入力変数からの値の導出

入力から値をエクスポートする必要があります。しかし、bashでは失敗します。

コードは次のとおりです。

echo "Please enter HOST :"
read RDSHOST && export RDSHOST

私の価値は次のとおりです - myserver.abc-zone5.com

スクリプトを実行すると、このエラーが発生します - 一致する ""構文エラーを探している間に予期しないEOF:予期しないファイルの終わり

このエラーを回避するには、二重引用符を使用して変数をエクスポートする方法を知る必要があります。

答え1

echo "Please enter REGION to login :" 
read region && export region 
echo "Please enter HOST to login :" 
read HOST && export HOST
echo "Please enter Port to login :" 
read localport && export localport
echo "Please enter username to login : " 
read username && export username sql "host=$HOST port=$localport user=$username --region=$region"

echo "username sql \"host=$HOST port=$localport user=$username --region=$region\""

出力:

Please enter REGION to login :
ASIA
Please enter HOST to login :
localhost
Please enter Port to login :
6000
Please enter username to login : 
foo
username sql "host=localhost port=6000 user=foo --region=ASIA"

答え2

exportshasの答えは素晴らしいです。変数に値を割り当てた後、変数のプロパティを設定する必要がないことを追加したいと思います。これは、スクリプトの主要な流れを中断することなくエクスポートできることを意味します。

# prep for user input
export region
export HOST
export localport
export username

# prompt user for input
echo 'Please enter REGION to login :'
read region
echo 'Please enter HOST to login :'
read HOST
echo 'Please enter Port to login :'
read localport
echo 'Please enter username to login :'
read username

# show and invoke the sql command
echo "sql \"host=$HOST port=$localport user=$username --region=$region\""
sql "host=$HOST port=$localport user=$username --region=$region"

また、export複数の変数の名前を使用してプロパティを設定できるため、コードのこの部分を短くすることができます。

# prep for user input
export region HOST localport username

# prompt user for input
echo 'Please enter REGION to login :'
read region
echo 'Please enter HOST to login :'
read HOST
echo 'Please enter Port to login :'
read localport
echo 'Please enter username to login :'
read username

# show and invoke the sql command
echo "sql \"host=$HOST port=$localport user=$username --region=$region\""
sql "host=$HOST port=$localport user=$username --region=$region"

(また、変数を拡張せずにsqlコマンドを呼び出す前にエコーしないので、プロンプト文字列を一重引用符で囲みます。したがって、sqlコマンドが中断されると、ユーザーはスクリプトが何をしているのかを知ることができます。)

関連情報