将 1:2:10 字符串解析为 3 个变量



在 bash shell 中,解析输入字符串 1:2:10 以设置 A=1、B=2、C=10 的最佳方法是什么? 自动将 A、B、C 设置为 3 个以":"分隔的数字。

此外,如果输入只有 1:10,则设置 A=1、C=10,然后 B = 某个默认值。

是的,我正在尝试模拟 Matlab 中使用的格式。 1:2:10 扩展到 1、3、5、7、9,1:10 扩展到 1、2、3、4、5、6、7、8、9、10。 我在想如果我能正确设置 A、B 和 C,那么很容易做到这种行为。

谢谢!!

您可以在一个简单的 bash 函数中完成所有这些操作:

s()( IFS=:; seq $1; )

这将创建一个局部环境(这就是为什么定义有括号而不是大括号),其中IFS被修改为在冒号上拆分。由于本地IFS$1是用冒号分词的。由于seq期望两个或三个参数精确地按照您指定的顺序排列,因此结果与您预期的相当好:

$ s 1:2:10
1
3
5
7
9
$ s 2:4
2
3
4

变量替换将起作用,因为它们是在调用s之前完成的:

$ from=1 to=6 by=2
$ s $from:$by:$to
1
3
5
$ IFS=: read a b c <<< '1:2:10'
$ echo $a
1
$ echo $b
2
$ echo $c
10
$ seq "$a" "$b" "$c"
1
3
5
7
9
$ IFS=: read a b c <<< '1:10'
$ echo $c
$ [ "$c" ] || seq "$a" "$b"
1
2
3
4
5
6
7
8
9
10

相关内容

  • 没有找到相关文章

最新更新