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

标签 linux string shell solaris ksh

假设我有一个变量 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”,因为 %% 扩展匹配变量末尾的最长可能匹配。在这种情况下,两个正则表达式 ?。

关于linux - 在ksh中获取字符串的最后n个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24553476/

相关文章:

javascript - 如何突出显示任意数量的(可能重复的)A,后跟非贪婪匹配器,然后是任意数量的 B 等(没有不合理的限制)?

arrays - 将单词逐个字符复制到数组时出错

Linux shell 总和列

linux - Bash 中的锁定文件 : Text file busy when running two copies at once

java - 如何动态地将元素添加到字符串数组?

linux - 如何使用另一个shell脚本一个接一个地运行多个shell脚本

linux - 自定义后如何调试Shell命令

python - 我如何在 Python 中执行 comm Linux 命令

c++ - 带线程的错误结果处理 vector <int>

python - 如何在 Linux 上将文件写入 RAM