使用sed设置变量可以在命令行上运行,但不能使用bash脚本

时间:2017-06-12 13:47:05

标签: linux bash shell sed

我已经看了很多答案,但我找不到任何有效的建议。

在命令行上,这有效:

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

然而,在bash脚本中,相同的行只是回显了一个空行

注意 - $ myrand是一个数字,就像用$ RANDOM生成的10340一样 猫用行号打印出一本字典 grep抓住$ myrand中的行;例如10340共性
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

2 个答案:

答案 0 :(得分:2)

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

grep $myrand

您的脚本正在运行:

grep myrand

这些不是一回事;后者正在寻找包含&#34; myrand&#34;在其中,而不是随机数。

顺便说一下 - 我建议采用不同的方式获得随机线。如果您有GNU coreutils,shuf工具是专用的:

myword=$(shuf -n 1 /path/to/dict/cracklib-small)

答案 1 :(得分:0)

#!/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中的$符号在哪里?
在发布之前必须先做一些工作。