我已经找了很多答案,但是我没有找到任何有效的建议。
在命令行中,此操作有效:

$ myvar=$( cat -n /usr/share/dict/cracklib-small | grep $myrand | sed -e "s/$myrand//" )
$ echo $myvar
$ commonness

然而,在bash脚本中,相同的行只是回显一个空行
notes-$myrand是一个数字,比如用$RANDOM生成的10340
猫打印出一本有行号的字典
grep抓取包含$myrand的行;例如10340 commonness
sed的目的是删除该行的$myrand部分,并将其替换为空。这是我的脚本示例
#!/bin/bash
# prints out a random word
myrand=$RANDOM
export myrand
myword=$( cat -n /path/to/dict/cracklib-small | grep myrand | sed -e "s/$myrand//g" <<<"$myword" )
echo $myword

最佳答案

您的命令行代码正在运行:

grep $myrand

你的脚本正在运行:
grep myrand

这不是同一件事;后者在寻找一个包含“myrand”的单词,而不是一个随机数。
顺便说一下--我建议用另一种方法来得到一条随机线。如果您有GNU coreutils,shuf工具是为以下目的而构建的:
myword=$(shuf -n 1 /path/to/dict/cracklib-small)

08-28 07:34