App*_*ula 3 unix linux bash shell
我有类似的字符串
name1::1.1.1.1::ps -ax
Run Code Online (Sandbox Code Playgroud)
我想使用 bash 脚本根据分隔符分割字符串::。
所需的输出应该是一个包含 3 个元素的数组
("name1" "1.1.1.1" "ps -ax")
Run Code Online (Sandbox Code Playgroud)
不带双引号
我感谢您的帮助。
:假设数组数据中没有s,使用bash模式替换来挤压::to ,:同时将字符串分配给$array,然后显示整个数组,然后只显示元素#2:
a="name1::1.1.1.1::ps -ax"
IFS=: array=(${a//::/:}) ; echo ${array[@]} ; echo "${array[2]}"
Run Code Online (Sandbox Code Playgroud)
输出:
name1 1.1.1.1 ps -ax
ps -ax
Run Code Online (Sandbox Code Playgroud)
:但是如果数组data中有s怎么办?特别是在第三个字段(命令)中,并且仅在该字段中。read与虚拟变量一起使用以吸收额外的::分隔符:
a="name1::1.1.1.1::parallel echo ::: 1 2 3 ::: a b"
IFS=: read x a y b z <<< "$a"; array=("$x" "$y" "$z"); printf "%s\n" "${array[@]}"
Run Code Online (Sandbox Code Playgroud)
输出:
name1
1.1.1.1
parallel echo ::: 1 2 3 ::: a b
Run Code Online (Sandbox Code Playgroud)