我的bash腳本的輸入可以是[fec1 :: 1]:80或[]:80的格式。第二個輸入意味着沒有給出IP地址。我的bash腳本是將輸入分成IP和端口。通過第二個輸入,腳本應該「理解」沒有給出IP。在bash中解析 - 從括號中提取內容
下面的邏輯似乎解決我的問題,在bash提示符:
$ ip=[]:78
$ echo $ip
[]:78
$ temp=(`echo $ip | awk -F'[][]' '{print $2}'`)
$ echo $temp
$
當我嘗試從腳本中做同樣的事情,結果是不同的:
local_endpoint="$1"
printf 'local_endpoint: %s\n' "$local_endpoint"
IN="$local_endpoint"
local_ip=$(echo "$IN" | awk -F'[][]' '{print $2}')
if [ -z "$local_ip" ] ; then
local_ip=$(echo "$IN" | awk -F':' '{print $1}')
local_port=$(echo "$IN" | awk -F':' '{print $2}')
else
local_port=$(echo "$IN" | awk -F'[][]' '{print $3}' | awk -F':' '{print $2}')
fi
printf 'IP: %s\n' $local_ip
printf 'port: %d\n' $local_port
if [ -z "$local_port" -a -z "$local_ip" ] ; then
printf 'No port and IP was given\n'
elif [ -z "$local_ip" ] ; then
printf 'No IP was given\n'
elif [ -z "$local_port" ] ; then
printf 'No port was given\n'
fi
exit 2
輸出:
# ./temp.sh []:829
local_endpoint: []:829
IP: []
port: 829
有什麼想法發生了什麼?另外,爲什麼我在輸出結尾處看到額外的逗號(,)?
'printf的「端口:%d \ n」,$ local_port'將在我已經更新了我的問題跟你的更改腳本稍作修改結束 – kev