2016-08-02 117 views
0

我有一個字符串,例如time=1234,我想提取=後面的數字。但是,該數字可以在0到100000的範圍內(例如 - time=1,time=23,time=99999等)。在bash中查找可變長度的子字符串

我試過類似$(string:5:8}的東西,但這隻適用於某個特定長度的示例。

如何獲得=符號後的所有內容的子串?我寧願在沒有外部命令(如cutawk)的情況下執行此操作,因爲我將在可能具有或可能不具有該功能的設備上運行此腳本。我知道有那些使用外部函數的例子,但是我正在嘗試找到一個不使用這種方法的解決方案。

回答

6
s=time=1234 
time_int=${s##*=} 
echo "The content after the = in $s is $time_int" 

這是一個參數擴展匹配一切從可變的前匹配*= - 因此,一切直到幷包括最後=

如果打算這是非貪婪(即,只除去內容的第一=而非最後=),用${s#*=} - 單#而不是兩個。


參考文獻:

2

如果time=部分constan T優可以通過使用${str#time=}

比方說,你有str='time=123123'如果執行echo ${str#time=}你會得到123123

+2

由於OP是通過使用小寫的變量名以下最佳實踐去掉前綴,你可能會做同樣的。 –

+2

... re:「最佳實踐」,請參閱http://pubs.opengroup.org/onlinepubs/009695399/basedefs/xbd_chap08.html,定義環境變量命名的約定;因爲shell變量共享一個命名空間(也就是說,例如,設置一個名爲PATH的shell變量將覆蓋環境變量PATH的內容),這些約定也適用於shell變量。 –

+0

感謝您根據您的建議更新,但我使用大寫的原因是,它不會與時間=部分混淆:) – Fma