在 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