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

Get substring of a string in korn shell

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

 [ "`echo "\c" | grep c`" ] && echo ksh93 || echo ksh88

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

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

此外,如果我希望子字符串从位置 2 开始直到结尾,该怎么做?

我找到了另一个对我有用的解决方案。找不到问题本身的解决方案为什么不起作用。

以下是对我有用的方法:

str1="get word from this-text"

得到第二个词。 -d 是分隔符(这里是space)

str2=`echo $str1 | cut -d" " -f 2`

echo $str2
word

从第 5 个开始获得 3 个字符

str2=`echo $str1 | cut -b 5-3`
echo $str2
wor

白space显着shell。你应该使用

$ stringvariable="foobar"
$ echo ${stringvariable:2:2}
ob

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

如果你的单词是space分隔的,你可以使用set:

$ stringvariable="foo bar baz zap"
$ set -- $stringvariable
$ echo 
baz

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