iamnewbie:這段代碼效率不高,但它應該提取子串,問題出在最後一個echo語句上,需要一些見解。bash中的子串提取
function regex {
#this function gives the regular expression needed
echo -n \'
for ((i = 1 ; i <= $1 ; i++))
do
echo -n .
done
echo -n '\('
for ((i = 1 ; i <= $2 ; i++))
do
echo -n .
done
echo -n '\)'
echo -n \'
}
# regex function ends
echo "Enter the string:"
read stg
#variable stg holds the string entered
if [ -z "$stg" ] ; then
echo "Null string"
exit
else
echo "Length of the $stg is:"
z=`expr "$stg" : '.*' `
#variable z holds the length of given string
echo $z
fi
echo "Enter the number of trailing characters to be extracted from $stg:"
read n
m=`expr $z - $n `
#variable m holds an integer value which is equal to total length - length of characters to be extracted
x=$(regex $m $n)
echo ` expr "$stg" : "$x" `
#the echo statement(above) is just printing a newline!! But not the result
我打算使用此代碼做的是,如果我輸入「賽車」,給「3」,它應該顯示「汽車」,這是最後三個字符。而不是顯示「汽車」它只是打印換行符。請更正此代碼,而不是提供更好的代碼。
的問題是你的輸出包含一個尾隨的換行符?這就是'echo'所做的。試試'printf%s $(expr ...)'? – 2015-02-24 20:15:37
@EtanReisner:正如書面所示,回聲有點沒有意義,除了規範化空白。雖然可能不是所提到的問題。我認爲問題是手動插入到$ regex中的撇號。對於那個綜合徵,真的需要有一個經典的答案。 – rici 2015-02-24 20:17:12
但我已經在正則表達式函數中使用了echo -n – 2015-02-24 20:18:24