このフォーラムで検索して別のコードを試していますが、うまく動作しないようです。
変数があります。
ip="192.168.1.227 192.168.1.205 192.168.1.217"
いいえ、各IPアドレスを異なる変数に分割したいと思います。
ip1=192.168.1.227
ip2=192.168.1.205
ip3=192.168.1.217
言葉で何かをしようとしています。
for ((word in $vds; i=0; i++));
do
echo $word
"ip$i"=$word
done
しかし、私はそれを動作させることはできません。
答え1
あなたがそうする可能性はほとんどありません実際に各個々のIP番号に別々の変数を割り当てたいと思います。 IP 番号をアレイに保存すると、管理が簡単になります。
ipnumbers=( $ip )
引用符のないこの使用は、$ip
(変数のデフォルト値を想定してIFS
)その値をスペースに分割し、結果の単語に対してファイル名ワイルドカードを呼び出しますが、データにファイル名ワイルドカードパターンがないため問題ありません。次に、分割された単語を配列の別々の要素として割り当てますipnumbers
。
次に(2番目の要素の場合)を使用して個々の要素にアクセスするか、"${ipnumbers[1]}"
ループを使用して繰り返すことができます。
for ipnum in "${ipnumbers[@]}"; do ...; done
答え2
配列変数を使用する方が良いです。
readarray -t -d ' ' ips <<<"$ip"
*
これはしばしば改行、グローバル文字(、、、?
)[]
などに問題を引き起こす「引用されていない」シェル分割を使用しません。次に配列を印刷します。
printf '%s\n' "${ips[@]}"
またはループで使用してください。
for i in "${ips[@]}"; do
echo "$i"
done
答え3
明らかに配列が好ましいアプローチですが、本当に別のバージョンが必要な場合は、ip$number
次のことを試してください。
eval
あなたのip$i=$word
課題は参考資料を慎重に検討します(廃止予定の予防措置を念頭に置いてくださいeval
)。- 小さなループは次のとおりです。
for word in $ip; do read ip$((++CNT)) <<< $word; done