Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.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
String 在bash中查找可变长度的子字符串_String_Bash - Fatal编程技术网

String 在bash中查找可变长度的子字符串

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_

我有一个字符串,比如time=1234,我只想提取=号后面的数字。但是,这个数字可能在0到100000之间,例如-time=1、time=23、time=99999等

我尝试过$string:5:8}之类的方法,但这只适用于特定长度的示例

如何获取=符号后所有内容的子字符串?我更愿意在没有外部命令(如cut或awk)的情况下执行此操作,因为我将在可能具有或不具有该功能的设备上运行此脚本。我知道有一些使用外部函数的例子,但我正试图找到一个不使用这些函数的解决方案

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混淆: