String 在shell中拆分一个字符串,使所有字段都达到final'';(猛击)

String 在shell中拆分一个字符串,使所有字段都达到final'';(猛击),string,bash,String,Bash,我希望得到字符串1.2.3.4.5的1.2.3.4 我知道我可以用这个代码来得到最终的数字,但是我可以用什么来得到之前的所有数字呢。(包括“:”) 我试过使用IFS $ IFS='.' read -ra STRING <<< "$foo" $ u_num="${STRING[0]}"'.'"${STRING[1]}"'.'"${STRING[2]}"'.'"${STRING[3]}" $ echo $u_num $ 1 2 3 4 # It should have return

我希望得到字符串1.2.3.4.5的1.2.3.4 我知道我可以用这个代码来得到最终的数字,但是我可以用什么来得到之前的所有数字呢。(包括“:”)

我试过使用IFS

$ IFS='.' read -ra STRING <<< "$foo"
$ u_num="${STRING[0]}"'.'"${STRING[1]}"'.'"${STRING[2]}"'.'"${STRING[3]}"
$ echo $u_num
$ 1 2 3 4
# It should have returned 1.2.3.4
$IFS='.'读取-ra字符串尝试使用:

echo ${foo%.*}
屈服:

foo="1.2.3.4.5"
echo ${foo%.*}
1.2.3.4

屈服

1 2 6
如果要将空格转换为
,可以使用
tr

echo $foo | tr ' ' '.'
foo=“1 2 6”


是的,这是在一个纯bashshell脚本中使用的。第二个示例的确切含义是什么?如果
foo
1.2.3.4.5
,那么您希望
1.2.6
的结果是什么?正如您所看到的,1234都将进入一个数组,但我的变量u_num只需要前2个。我将编辑代码使其全部为四个。为什么要使用
?很抱歉,这是一个错误,已更新。这还返回'1 2 3'@RussellHickey它在Debian下与bash一起工作。你确定你在使用bash吗?你的话是什么?@RussellHickey我不确定我是否理解你的评论。究竟是什么产生了
13
?也许你在问题陈述中的第二个例子需要澄清。@RussellHickey你能用
tr
?例如,
echo$foo | tr'.
?@RussellHickey
tr
是Bash的外部命令,而不是内置命令。通常,当我们只提到Bash(或纯Bash)时,我们忽略所有外部命令,只需要内置命令。键入
help
以获得所有内置项和关键字的列表;您将看到
tr
不在列表中。
1 2 6
echo $foo | tr ' ' '.'
1.2.6