steve_m
steve_m

Reputation: 26

using sed to set a variable works on command line, but not bash script

I have looked quite a bit for answers but I am not finding any suggestions that have worked so far.

on command line, this works:

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

however, inside a bash script the same exact lines just echoes out a blank line

notes - $myrand is a number, like 10340 generated with $RANDOM
cat prints out a dictionary with line numbers
grep grabs the line with $myrand in it ; e.g. 10340 commonness
sed is intended to remove the $myrand part of the line and replace it with nothing. here is my sample script

#!/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

Upvotes: 0

Views: 210

Answers (2)

Jagga
Jagga

Reputation: 189

#!/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

where is the $ sign in grep myrand ?
you must put in some work before posting it here.

Upvotes: 0

Charles Duffy
Charles Duffy

Reputation: 295423

Your command line code is running:

grep $myrand

Your script is running:

grep myrand

These are not the same thing; the latter is looking for a word that contains "myrand" within it, not a random number.


By the way -- I'd suggest a different way to get a random line. If you have GNU coreutils, the shuf tool is built-to-purpose:

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

Upvotes: 2

Related Questions