在 korn shell 中获取字符串的子字符串

xGe*_*Gen 3 unix ksh

我必须使用 ksh88 提取子字符串。(顺便说一句,找到 ksh 版本的简单方法$KSH_VERSION对我不起作用。我不得不使用

 [ "`echo "\c" | grep c`" ] && echo ksh93 || echo ksh88
Run Code Online (Sandbox Code Playgroud)

我尝试使用命令echo ${stringvariable : 2: 2}但它说bad substitution。我是 Unix 世界的新手。这是我为得到结果所做的:

我已经使用 PUTTY 登录到 Unix 并输入了上面的命令。我也先尝试了 ksh 命令,然后是我的命令,但仍然没有成功。有什么我做错了吗?

另外,如果我想要从位置 2 开始直到结束的子字符串怎么做?

Jen*_*ens 5

空格在 shell 中很重要。你应该使用

$ stringvariable="foobar"
$ echo ${stringvariable:2:2}
ob
Run Code Online (Sandbox Code Playgroud)

注意:这适用于ksh93,它不适用于ksh88。

如果您的单词以空格分隔,则可以使用set:

$ stringvariable="foo bar baz zap"
$ set -- $stringvariable
$ echo $3
baz
Run Code Online (Sandbox Code Playgroud)

这应该总是比无用的cut. 使用cut获取字符串中的字符的编程相当于使用 40 吨卡车购买和运输一块方糖。