次の変数から値を読み取ろうとします。
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]$