我必须使用ksh88提取子字符串。 (BTW找到ksh $KSH_VERSION
版本的简单方法对我不起作用。我不得不使用
[ "`echo "\c" | grep c`" ] && echo ksh93 || echo ksh88
我尝试使用命令echo ${stringvariable : 2: 2}
但它说bad substitution
。我是Unix世界的新手。这就是我做的结果:
我使用PUTTY登录Unix并输入上述命令。我也尝试过第一个ksh命令,然后是我的命令,但仍然没有成功。我有什么问题吗?
另外如果我想要从第2位开始直到结束的子串怎么做?
答案 0 :(得分:3)
空白在shell中很重要。你应该使用
$ stringvariable="foobar"
$ echo ${stringvariable:2:2}
ob
注意:这适用于 ksh93 ,不适用于 ksh88 。
如果您的单词以空格分隔,则可以使用set
:
$ stringvariable="foo bar baz zap"
$ set -- $stringvariable
$ echo $3
baz
这应该始终优先于cut
的无用叉。使用cut
获取字符串中的字符就相当于使用40吨卡车购买和运输一块方糖。
答案 1 :(得分:2)
我找到了另一个对我有用的解决方案。无法找到为什么问题本身的解决方案无效。
这对我有用:
str1="get word from this-text"
str2=`echo $str1 | cut -d" " -f 2`
echo $str2
word
str2=`echo $str1 | cut -b 5-3`
echo $str2
wor