Bash:如何从字符串中删除字符,直到遇到特定字符

Bash:如何从字符串中删除字符,直到遇到特定字符

基本上,我正在尝试制作一个在某一时刻需要存储坐标的程序。该程序的一部分需要将一个字符串分成两个字符串,以便我能够分别对两个字符串执行数学运算,然后重新连接两个字符串。需要如何以伪代码更改字符串的示例:

Var1="10 17"
separate Var1 into Var2 and Var3
#using the command echo "$Var1,Var2,Var3" here would output 10 17,10,17
#preform math on Var2 and/or Var3 here
Var1="$Var2 $Var3"

部分问题是我不能这样做

Var2=${Var1::-2}

或删除第一个字符以删除第一个或最后两个数字的等效内容,因为这些数字有时可能大于 99 或小于 10。请注意,我希望两个数字之间的分隔符是空格。有人知道我该怎么做吗?

答案1

如果分隔符是单个空格,请使用前缀和后缀剥离

before_the_first_space="${Var1%% *}"
after_the_first_space="${Var1# *}"
before_the_last_space="${Var1%* }"
after_the_last_space="${Var1##* }"

或者,利用分词关于不带引号的变量替换。这将每个空白序列视为分隔符并将结果放入数组中。set -f禁用通配符扩展set +f将其重新打开。

set -f
parts=($Var1)
set +f
echo "${parts[0]}"

或者,使用read内置将变量拆分为数组。read从标准输入读取,因此使用这里的字符串将变量的内容作为输入传递。

read -r -a parts <<<"$Var1"

无引号替换方法和read基于值拆分的方法IFS

相关内容