2017-05-29 89 views
3

是否有一個內置的POSIX等價物用於此bashism?檢查字符串的最後一個字符

my_string="Here is a string" 
last_character=${my_string: -1} 

我一直看到這樣的事情建議,但他們似乎像黑客。

last_character=$(echo -n "$my_string" | tail -c 1) 
last_character=$(echo -n "$my_string" | grep -o ".$") 

但是,也許黑客都是我們與POSIX殼?

回答

4

如果你真的做POSIX只:

my_string="Here is a string" 
last_character=${my_string#"${my_string%?}"} 

它的作用是除去基本上從$my_string年初$my_string SANS它的最後一個字符,讓你只用最後一個字符。

+0

謝謝,仍然是黑客,但至少它是一個只有參數擴展的黑客! – miken32

+0

@ miken32 - 絕對是駭人的,但是會跳過管道並調用其他命令。它遠沒有多功能,但是,這是POSIX。 – zwer

0
num=`echo $my_string | wc -c ` 
let num-=1 
last=`echo $my_string | cut -c$num` 
echo $last 

assumpting:(它的lastchar here)是你需要最後一個字符的字符串。希望這是有幫助的。

+1

如果輸入字符串包含換行符,則會中斷。 –

0

如果您只需要檢查最後一個字符是什麼,然後根據它的值進行操作,那麼case ... esac構造是一種便攜的方式來表達它。

相關問題