Linux VM と共有されている Windows で生成されたファイルを解析する単純な Linux シェル スクリプトがあります。このファイルから IP アドレスを取得し、末尾にコロン 0 (:0) を追加して、DISPLAY 環境変数を設定したいと考えています。そうしようとすると、奇妙な結果が得られます。
スクリプトは次のとおりです。
#!/bin/bash
LOCAL_HOST=`grep IPv4 /mnt/hgfs/share/localip | awk 'NR ==1 {printf "%s\n", $14 }'`
# for some reason, it overwrites the string from the beginning
COLON_ZERO=':0'
export DISPLAY=${LOCAL_HOST}${COLON_ZERO}
echo $DISPLAY
# This obviously works, but doesnt have the COLON_ZERO on the end
echo "export DISPLAY="$LOCAL_HOST
このスクリプトを実行した結果の出力は次のとおりです。
# ./display.sh
:09.107.26.25
export DISPLAY=159.107.26.25
# bash --version
GNU bash, version 3.2.48(1)-release (x86_64-pc-linux-gnu)
Copyright (C) 2007 Free Software Foundation, Inc.
必要に応じて、スクリプトで使用されるファイルからの grep の結果を次に示します。
# grep IPv4 /mnt/hgfs/share/localip
IPv4 Address. . . . . . . . . . . : 159.107.26.25
IPv4 Address. . . . . . . . . . . : 192.168.223.1
IPv4 Address. . . . . . . . . . . : 192.168.132.1
IP アドレス文字列の末尾にコロン 0 を追加すると、なぜこの奇妙な結果になるのですか? スクリプトを変更して正しい結果を得るにはどうすればよいですか?