2016-11-22 29 views
2

我嘗試在bash中的dot.)之前減去第一個字符串。提取點之前的子串

例如:

1.2.3 -> 1 
11.4.1 -> 11 

我使用了基於該docs以下命令:

s=4.5.0 
echo "${s%.*}" 

但它輸出映象4.5,而不是4。我不明白。

這是爲什麼?

+3

'echo「$ {s %%。*}」'? – arco444

回答

4

您需要使用%%從末尾刪除最長比賽:

$ echo "${s%%.*}" 
4 

the docs

${parameter%%word}
刪除最大的後綴模式單詞應擴展爲產生模式。然後參數展開將產生參數,其中後綴的最大部分由被刪除的模式匹配。

+0

完全正確。感謝您指出了。 – Mornor

2

您還可以使用內置在最新版本的外殼(因爲bash 3.0)的bashRegular Expressions功能,使用波浪號(=~)運算符。

$ string="s=4.5.0" 
$ [[ $string =~ =([[:alnum:]]+).(.*) ]] && printf "%s\n" "${BASH_REMATCH[1]}" 
4 
$ string="s=32.5.0" 
$ [[ $string =~ =([[:alnum:]]+).(.*) ]] && printf "%s\n" "${BASH_REMATCH[1]}" 
32 
相關問題