変数から値を読み取る

変数から値を読み取る

次の変数から値を読み取ろうとします。

server=$(cat "$CONF_PATH" | grep "DevServer" | cut -d'=' -f2)
echo "server is : $server "
port=$(cat "$CONF_PATH" | grep "DevPort" | cut -d'=' -f2)
echo "port is : $port "
dbname=$(cat "$CONF_PATH" | grep "DevDatabase" | cut -d'=' -f2)
echo "dbname is :   $dbname "
echo jdbc:sqlserver://$server:$port;database=$dbname;

最後のechoステートメントは機能しません。次のような出力が出ると予想しました。

jdbc:sqlserver://abc:1433;database=devdb;

ここではabc、サーバー名、1433ポート、devdbデータベース名です。

ベストアンサー1

あなたは引用符を忘れてしまった。

実際の入力が不明なので、変数の内容を置き換えました。

引用なし:

[user@machine test]$ server=asdf
echo "server is : $server "
port=asdf2
echo "port is : $port "
dbname=asdf3
echo "dbname is :   $dbname "
echo jdbc:sqlserver://$server:$port;database=$dbname;
server is : asdf 
port is : asdf2 
dbname is :   asdf3 
jdbc:sqlserver://asdf:asdf2
[user@machine test]$ 

エスケープされていないセミコロンを使用して、;シェルに新しいコマンドを開始するように指示します。ご覧のとおり、シェルは$dbname次に割り当てられます$database

[user@machine test]$ echo $database
asdf3

引用符を含める:

[user@machine test]$ #!/bin/bash
server=asdf
echo "server is : $server "
port=asdf2
echo "port is : $port "
dbname=asdf3
echo "dbname is :   $dbname "
echo "jdbc:sqlserver://$server:$port;database=$dbname;"
server is : asdf 
port is : asdf2 
dbname is :   asdf3 
jdbc:sqlserver://asdf:asdf2;database=asdf3;
[user@machine test]$ 

おすすめ記事