Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 获取ksh中字符串的最后n个字符_Linux_String_Shell_Solaris_Ksh - Fatal编程技术网

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

Linux 获取ksh中字符串的最后n个字符,linux,string,shell,solaris,ksh,Linux,String,Shell,Solaris,Ksh,假设我有一个变量name保存一些字符串值 要获取最后n个字符,我们在bash中编写: $ echo "${name: -n}" 在ksh中,我见过sed和awk方法,但我要寻找的是一种类似于bash的行或管道解决方案来提取最后的字符 这些是迄今为止的错误和努力: AB12 $ name="123456" AB12 $ echo ${name:(-3)} ksh: ${name:(-3)}: bad substitution AB12 $ echo${name:0:-3} ksh: echo

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

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

$ echo "${name: -n}"
ksh
中,我见过
sed
awk
方法,但我要寻找的是一种类似于
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%??}
嵌入到扩展名
${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}"

如果超出长度,则右(和左)对齐属性会导致截断,如果指定的值太短,则会导致填充。

dint Understand this part=>
var#${var%??}
:)这是一个嵌套的扩展。扩展${var%%???}嵌入在扩展${var#}中。${var#string}扩展将从变量开头截断与“string”匹配的任何内容。因此,在本例中,我们将删除变量开头与${var%%???}匹配的任何内容。就其本身而言,${var%%???}与示例中变量的“this is my v”匹配,因为%%扩展匹配变量末尾可能最长的匹配。在本例中,两个regexp。希望对您有所帮助。这是获取KornShell脚本最后几个字符串字符的正确示例。多谢:)嗯
var="This is a test"
typeset -R4 foo
foo="${var}"
echo "${foo}"