我想迭代一個回圈,我回圈的變數 $_INFO 包含:
tcp/443
tcp/80
udp/54
我試圖用這個回圈決議我的變數
_INFO=("tcp/443" "tcp/80" "udp/54")
for val in "$_INFO"; do
IFS=/ read _PROTOCOL _PORT <<< $_INFO
echo "protocol: $_PROTOCOL"
echo "port: $_PORT"
done
我在輸出中收到:
protocol: tcp
port: 443 tcp/80 udp/54
雖然我想在輸出中收到:
protocol: tcp
port: 443
protocol: tcp
port: 80
protocol: udp
port: 54
任何指向正確方向的指標都會有所幫助。謝謝
uj5u.com熱心網友回復:
bash 由于移除了匹配的前綴或后綴模式的引數擴展,單獨就足夠了:
_INFO=("tcp/443" "tcp/80" "udp/54")
for val in "${_INFO[@]}"; do
echo "protocol: ${val%/*}"
echo "port: ${val#*/}"
done
uj5u.com熱心網友回復:
如果沒問題awk:
$ echo "$_INFO" | awk -F\/ '{printf "protocol: %s\nport: %d\n", $1, $2}'
protocol: tcp
port: 443
protocol: tcp
port: 80
protocol: udp
port: 54
uj5u.com熱心網友回復:
你必須用你的輸入來饋送整個回圈。
#! /bin/bash
_INFO='tcp/443
tcp/80
udp/54'
while IFS=/ read _PROTOCOL _PORT; do
echo "protocol: $_PROTOCOL"
echo "port: $_PORT"
done <<< $_INFO
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/388855.html
下一篇:如何使它成為嵌套的For回圈?
