0

bash スクリプトに問題があります。

文字列を(インデックス付きの名前付き)配列に分割します。

文字列には次の値を指定できます。status=online clients=5 name=Server 文字列には、次のようないくつかのコマンドを指定することもできます (これが問題です)。 status=online clients=5 name=Server|status=offline clients=0 name=Server_2

最初の質問: この "|" を分割するにはどうすればよいですか、または確認する必要がありますか? 存在しますか?

2 番目の質問: この値を from string: のような名前付き配列に分割する必要があります。status=online clients=5 name=Server配列は次のようになります。

[status] = [online]
[clients] = [5]
[name] = [Server]

セパレーター「|」の場合 存在する場合、2 つ (またはそれ以上) の配列で結果を取得する必要があります。

$mainarray [0]
[status] = [online]
[clients] = [5]
[name] = [Server]

$mainarray [1]
[status] = [offline]
[clients] = [0]
[name] = [Server2]

たとえば、echo $mainarray[0][status]i を使用すると「オンライン」になります。

それは可能ですか?

4

1 に答える 1

1

擬似多次元連想配列を使用できます。

str='status=online clients=5 name=Server|status=offline clients=0 name=Server_2'
n=0
declare -A ary

# split the string on "|"
IFS='|' read -ra sets <<< "$str"

# interate over the sets of variables to populate the array
for set in "${sets[@]}"; do
    IFS=' ' read -ra pairs <<< "$set"
    for pair in "${pairs[@]}"; do
        IFS='=' read var value <<< "$pair"
        ary["$n,$var"]=$value
    done
    ((n++))
done

# now, what do we have?
for key in "${!ary[@]}"; do 
    printf "%s => %s\n" "$key" "${ary["$key"]}"
done

出力の順序は未定です

0,clients => 5
1,status => offline
1,name => Server_2
0,status => online
1,clients => 0
0,name => Server
于 2015-04-15T14:47:08.843 に答える