在Bash中访问字符串的最后x个字符 [英] Accessing last x characters of a string in Bash

查看:66
本文介绍了在Bash中访问字符串的最后x个字符的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我发现使用${string:0:3}可以访问字符串的前3个字符.是否有一种相当简单的方法来访问后三个字符?

I found out that with ${string:0:3} one can access the first 3 characters of a string. Is there a equivalently easy method to access the last three characters?

推荐答案

string的后三个字符:

${string: -3}

${string:(-3)}

(请注意第一种形式的:-3之间的空间).

(mind the space between : and -3 in the first form).

请参考参考资料中的 Shell参数扩展手册:

${parameter:offset}
${parameter:offset:length}

Expands to up to length characters of parameter starting at the character
specified by offset. If length is omitted, expands to the substring of parameter
starting at the character specified by offset. length and offset are arithmetic
expressions (see Shell Arithmetic). This is referred to as Substring Expansion.

If offset evaluates to a number less than zero, the value is used as an offset
from the end of the value of parameter. If length evaluates to a number less than
zero, and parameter is not ‘@’ and not an indexed or associative array, it is
interpreted as an offset from the end of the value of parameter rather than a
number of characters, and the expansion is the characters between the two
offsets. If parameter is ‘@’, the result is length positional parameters
beginning at offset. If parameter is an indexed array name subscripted by ‘@’ or
‘*’, the result is the length members of the array beginning with
${parameter[offset]}. A negative offset is taken relative to one greater than the
maximum index of the specified array. Substring expansion applied to an
associative array produces undefined results.

Note that a negative offset must be separated from the colon by at least one
space to avoid being confused with the ‘:-’ expansion. Substring indexing is
zero-based unless the positional parameters are used, in which case the indexing
starts at 1 by default. If offset is 0, and the positional parameters are used,
$@ is prefixed to the list.


由于该回答得到了一些常规的看法,让我添加一种可能性来解决 John Rix 的评论;正如他提到的那样,如果您的字符串长度小于3,则${string: -3}会扩展为空字符串.在这种情况下,如果要扩展string,则可以使用:


Since this answer gets a few regular views, let me add a possibility to address John Rix's comment; as he mentions, if your string has length less than 3, ${string: -3} expands to the empty string. If, in this case, you want the expansion of string, you may use:

${string:${#string}<3?0:-3}

这使用?:三元if运算符,可以在 Shell算术;由于如前所述,偏移量是一个算术表达式,因此有效.

This uses the ?: ternary if operator, that may be used in Shell Arithmetic; since as documented, the offset is an arithmetic expression, this is valid.

这篇关于在Bash中访问字符串的最后x个字符的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆