我的问题很简单,但我无法解决它:
我有一个看起来像这样的字符串:
-3445.51692 -7177.16664 -9945.11057
棘手的部分是每个数字之间可能有零个或多个空格,后者可能是负数或正数,这意味着字符串也可能像:
-3445.51692-7177.16664 -9945.11057
或
-3445.51692 7177.16664-9945.11057
(如果是正值,则至少有一个空格在前面)
我希望将此字符串拆分为三个包含每个数字的变量,例如:
a=-3445.51692
b=-7177.16664
c=-9945.11057
因此,我想使用像
这样的东西IFS=' -' read -a array <<< "$string"
但我不知道如何指定“零个或多个空格”。并使用“ - ”作为分隔符将其从最终结果中删除,而我想保留符号。
有什么想法吗?
答案 0 :(得分:1)
在进行IFS分割之前规范化输入,即任何减号都会获得前置空格:
canonicalized_string=$(echo "$string" | sed 's/-/ -/g')
set -- $canonicalized_string # No need to mess with IFS.
a=$1
b=$2
c=$3
这假定正好是3个数字。以超紧凑的形式:
set -- $(echo "$string" | sed 's/-/ -/g')
a=$1 b=$2 c=$3
答案 1 :(得分:0)
只需使用sed
添加每个-
前面的空格,例如:
echo $string | sed 's/-/ -/g'
答案 2 :(得分:0)
您可以先注入空格来使用read -a
:
s='-3445.51692-7177.16664 -9945.11057'
IFS=' ' read -ra arr <<< "${s//-/ -}"
printf "[%s]\n" "${arr[@]}"
[-3445.51692]
[-7177.16664]
[-9945.11057]