2016-10-26 55 views
1

我有一張所有卡反人類白卡的測試列表。我的目標是輸入rancard並從caghw.txt文件中獲取一個隨機卡的字符串。所以如果212是隨機數,那麼打印212行。這是我在我的.bashrc中有:如何在bash函數中使用局部變量?

rancard() 
{ 
    card=echo $((1 + RANDOM % 706)) 

    #I'm trying to take the random value returned from 
    #the math function above and use it as an argument 
    #to the head command 

    head -$card /root/caghw.txt | tail -1 
} 

我在做什麼錯?我知道我有正確的想法,但對語法不太熟悉。

作爲免責聲明,這不適用於學校或任何事情。這是爲了我自己的娛樂。

+0

這不是一個局部變量。 'bash'有局部變量('help local'),但'sh'可能不會。 – rici

回答

2

務必:

card=$((1 + RANDOM % 706)) 

這裏我們節省算術擴展的輸出,$((1 + RANDOM % 706))變量card。如果您想要保存命令替換的輸出$(),請執行相同操作。

,如果你換用命令替換命令你的人會工作,$()

card=$(echo $((1 + RANDOM % 706))) 

這是絕對必要的,而且多餘的,因爲節省算術擴展的輸出,如上圖所示會做。


所以你的函數可以採取以下最終形式:

rancard() { 
    card=$((1 + RANDOM % 706)) 
    head -"$card" /root/caghw.txt | tail -1 
} 

,或者如果你想變card地方,使用local關鍵字:

rancard() { 
    local card=$((1 + RANDOM % 706)) 
    head -"$card" /root/caghw.txt | tail -1 
} 
1

旁邊已經給出的答案,我會優化您的功能,以刪除headtail命令只需使用sed

sed -n "$((1 + RANDOM % 706))p" /root/caghw.txt 

-n是去除由sed默認完成的自動行打印。 p表示打印行號$((...))

相關問題