我有一张所有反人类卡白卡的测试清单。我的目标是输入密码卡并从caghw.txt文件中获取随机卡的字符串。因此,如果212是随机数,则打印行212。这就是我在.bashrc中的内容:
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 :(得分: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 :(得分:1)
在已经给出的答案旁边,我会优化您的功能,只需使用head
即可删除tail
和sed
命令:
sed -n "$((1 + RANDOM % 706))p" /root/caghw.txt
-n
是删除sed
默认执行的自动行式打印。
p
表示打印由$((...))