String 在bash中查找可变长度的子字符串
我有一个字符串,比如time=1234,我只想提取=号后面的数字。但是,这个数字可能在0到100000之间,例如-time=1、time=23、time=99999等 我尝试过$string:5:8}之类的方法,但这只适用于特定长度的示例 如何获取=符号后所有内容的子字符串?我更愿意在没有外部命令(如cut或awk)的情况下执行此操作,因为我将在可能具有或不具有该功能的设备上运行此脚本。我知道有一些使用外部函数的例子,但我正试图找到一个不使用这些函数的解决方案String 在bash中查找可变长度的子字符串,string,bash,String,Bash,我有一个字符串,比如time=1234,我只想提取=号后面的数字。但是,这个数字可能在0到100000之间,例如-time=1、time=23、time=99999等 我尝试过$string:5:8}之类的方法,但这只适用于特定长度的示例 如何获取=符号后所有内容的子字符串?我更愿意在没有外部命令(如cut或awk)的情况下执行此操作,因为我将在可能具有或不具有该功能的设备上运行此脚本。我知道有一些使用外部函数的例子,但我正试图找到一个不使用这些函数的解决方案 s=time=1234 time_
s=time=1234
time_int=${s##*=}
echo "The content after the = in $s is $time_int"
这是一个参数扩展,它匹配变量前面的所有匹配*=的内容,因此,所有内容直到并包括最后一个=
如果希望这是非贪婪的,即只删除第一个=之前的内容,而不是最后一个=,请使用${s*=}-一个而不是两个
参考资料:
如果time=part为常量,则可以使用${strtime=}删除前缀
假设您有str='time=123123',如果您执行echo${strtime=},您将得到123123,因为OP使用小写变量名遵循最佳实践,您也可以这样做……re:最佳实践,请参阅,定义环境变量命名的约定;由于shell变量共享一个名称空间,例如,设置名为PATH的shell变量将覆盖环境变量PATH的内容,因此这些约定也适用于shell变量。感谢按照您的建议进行更新,但我使用大写的原因是为了避免与time=part混淆: