丫灼
Lv 4
丫灼 asked in 電腦與網際網路程式設計 · 1 decade ago

shell script語法問題

有一個變數 , 假設是 test

echo $test 時出現 abcde

我要做的是將此變數最後面一位改成數字

例如:echo $test 時出現

abcd1,abcd2,abcd3,abcd4..等等

請問要如何寫阿?

感謝

Update:

大師你好

test=`echo $test | sed "s/.$/1/"` #把test由abcde改成abcd1

echo $test #會顯示abcd1

你說的這行,我顯示的結果非abcd1

而是echo $test|sed "s/.$/1/"

請問這...哪裡有問題?

Update 2:

我試出來了

`這個符號是鍵盤1左邊的那一個符號

我把他誤打成單引號

︿︿

Update 3:

大師你好

我再問一個問題

假如 test 這個變數的內容不確定是什麼(無法事先知道變數的內容)

只知道 test 這個變數的長度是由5個字母組成

例如:

echo $test 時出現 hbeoc

我想要將 test 此變數後兩個字母換成數字

例如:echo $test 時出現

hbe00,hbe01,hbe02,hbe03..等等

請問這該怎麼寫?

Update 4:

我了解了^^

Update 5:

大師你好:

可以再幫我看這題嗎?

感謝

http://tw.knowledge.yahoo.com/question/question?qi...

1 Answer

Rating
  • Lv 7
    1 decade ago
    Favorite Answer

    你可以用sed.例:

    echo $test | sed 's/.$/1/'

    會顯示abcd1

    echo $test | sed 's/.$/2/'

    會顯示abcd2

    懂不懂?不懂請再問

    2009-02-04 00:53:00 補充:

    你可以用sed.例:

    echo $test | sed "s/.$/1/"

    會顯示abcd1

    echo $test | sed "s/.$/2/"

    會顯示abcd2

    用此法並不會改變test裡的值.你若要改變test裡的值的話那你要把這行執行的結果存進test裡.例:

    test=`echo $test | sed "s/.$/1/"` #把test由abcde改成abcd1

    echo $test #會顯示abcd1

    "s/.$/1/"裡的

    s代表'更換'.其格式是s/<要更換的字串>/<新的字串>/.

    要更換的字串是".$".

    "."表示任何一個字元.

    "$"表示結尾.所以".$"表示結尾的最後一個字元

    新的字串是"1".

    所以"s/.$/1/"表示要把每一行裡的最後一個字元改成1.

    妳若要顯示

    abcd1

    abcd2

    abcd3

    ..

    的話那你把echo $test | sed "s/.$/1/"擺在一個迴圈裡面就好了

    例:

    i=0 #i的初定值為0

    while [ $i -ne 10 ] #若i不等於10就執行迴圈

    do

    echo $i #顯示i的值

    i=`expr $i + 1` #加一進i

    done

    你把echo $i換一下即可.

    P.S. 這是在ksh裡寫的.在bash裡可用.但是在csh或其它的shell裡可能就不能用了.不過原理是一樣的.

    懂不懂?不懂請再問

    2009-02-04 22:54:48 補充:

    你還是可以用sed啊.只要更改要換的字串跟新的字串就行了.

    解這題的要換的字串是".$".

    ".$"裡的

    "."表示"任何一個字元".

    "$"表示"結尾".

    所以".$"表示"結尾的最後一個字元".

    那"結尾的最後二個字元"要怎麼寫?

    請自己試試吧

    懂不懂?不懂請再問

    Source(s): Myself, Myself
Still have questions? Get your answers by asking now.