获取ksh中字符串的最后n个字符



假设我有一个变量name保存一些字符串值

获取最后n个字符,在bash中我们这样写:

$ echo "${name: -n}"

ksh中等效的方式是什么,我已经看到了sedawk方法,但我正在寻找的是类似于bash的一行或管道解决方案来提取最后字符

这些是目前为止的错误和努力:

AB12 $ name="123456"
AB12 $ echo ${name:(-3)}
ksh: ${name:(-3)}: bad substitution
AB12 $ echo${name:0:-3}
ksh: echo${name:0:-3}: bad substitution
AB12 $ print ${name%?}
12345
AB12 $  echo "some string" | tail -c -1
tail: cannot open input
AB12 $ echo -n "my string discard"| tail -c -1
tail: cannot open input
AB12 $ echo "foo"| cut -c 1-2
fo
AB12 $ echo "foo"| cut -c -2
fo
AB12 $ echo $name
123456
AB12 $ echo "${name: -3}"
ksh: "${name: -3}": bad substitution

我目前在Solaris上- 如果这有帮助的话!

您可以这样使用,例如n=2(我们将在嵌套展开中使用2个问号):

$ var="this is my var"
$ echo "${var#${var%??}}"
ar

是一个嵌套展开。

扩展${var%%??}嵌入在扩展${var# }中。
${var#string}扩展将从匹配'string'的变量开始切断任何内容。所以我们在这个例子中说,从匹配${var%%??}的变量开始删除任何内容。

就其本身而言,${var%%??}匹配示例中变量的"this is my v",因为%%展开匹配变量末尾可能的最长匹配。在本例中,两个regexp ?

你的剪裁看起来不错,只是得到正确的偏移量。

#!/bin/ksh
var="This is a string"
n=2
(( offset =  ${#var} - $n + 1 ))
echo ${var} | cut -c ${offset}- 

或作为联机者

echo ${var} | cut -c $(expr  ${#var} - $n + 1 )-

已经有了一个公认的答案,但这里有一个替代方法,使用ksh的合理变量概念:

var="This is a test"
typeset -R4 foo
foo="${var}"
echo "${foo}"

右对齐(和左对齐)属性导致截断,如果超过长度,或填充,如果分配的值太短。

最新更新