Bash:通过分隔符分割字符串,忽略空格

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)

不带双引号

我感谢您的帮助。

agc*_*agc 5

:假设数组数据中没有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)