LinuxQuestions.org

LinuxQuestions.org (/questions/)
-   Linux - Newbie (https://www.linuxquestions.org/questions/linux-newbie-8/)
-   -   BASH: instad of echo-ing, I just want to assing to a bash variable... how?? (https://www.linuxquestions.org/questions/linux-newbie-8/bash-instad-of-echo-ing-i-just-want-to-assing-to-a-bash-variable-how-686853/)

rylan76 11-28-2008 07:53 AM

BASH: instad of echo-ing, I just want to assing to a bash variable... how??
 
Hi Guys

Given this bash fragment:

Code:

filename="${base%.*}"
echo ${base%}|awk -F . '{print $NF}'

how the heck do I get the output to go into a variable, INSTEAD of being echoed?

E. g. this does NOT work:

Code:

filename="${base%.*}"
ext="${base%}|awk -F . '{print $NF}'"

I just want what is echo-ed, to go into a bash variable instead - extremely simple - but I've been at this for hours (incredible eh?) but I simply cannot get it to work.

It feels as if I must escape something somehow, to keep the code from being "triggered" even if being assigned to a variable?

colucix 11-28-2008 08:00 AM

Use command substitution. Better with the $(...) syntax, unless you want your code be portable to the Bourne Shell.

rylan76 11-28-2008 08:05 AM

Thanks... I already have... it is why I posted...

I have tried

Code:

ext="`${file_base%}|awk -F . '{print $NF}'`"
but this results in

[rylan@development ~]$ prozget.sh http://www.google.com.abc.def/tzaneen.xls
xls
tzaneen
./prozget.sh: line 8: ./tzaneen.xls: Permission denied

where line 8 is the above line of code...

How do I substitute correctly? The link you sent stipulated `` as command substitution characters.

Thanks! Any other ideas how to assign the output to a variable?

rylan76 11-28-2008 08:07 AM

If I try

Code:

ext=$("${file_base%}|awk -F . '{print $NF}'")
as you seem to suggest (newbie - I don't understand what you mean with "use $(...)") it results in

Quote:

[rylan@development ~]$ prozget.sh http://www.google.com.abc.def/tzaneen.xls
xls
tzaneen
./prozget.sh: line 8: tzaneen.xls|awk -F . '{print }': command not found
I have also tried:

Quote:

ext="${`file_base%}|awk -F . '{print $NF}'`}"
ext="$${`file_base%}|awk -F . '{print $NF}'`}"
ext="{`file_base%}|awk -F . '{print $NF}'`}"
etc...

Ye gods... I just want that to go into a variable... not go to the moon...! :)

dive 11-28-2008 08:15 AM

Code:

ext=`echo ${base%}|awk -F . '{print $NF}'`

colucix 11-28-2008 08:18 AM

Quote:

Originally Posted by rylan76 (Post 3357765)
newbie - I don't understand what you mean with "use $(...)"

If you take a look at the link I have provided, you will find out!
Quote:

Ye gods... I just want that to go into a variable... not go to the moon...! :)
Take it easy. You want the output of a command into a variable, right? The correct syntax is
Code:

varname=$(command)
where "command" must be some valid command giving some output. Ok, first build the command, then embed it with the syntax for command substitution. Is the following a valid command?
Code:

${file_base%}|awk -F . '{print $NF}'
No. And the following?
Code:

echo ${file_base%}|awk -F . '{print $NF}'
Yes. Now assign the output to a variable:
Code:

my_var=$(echo ${file_base%}|awk -F . '{print $NF}')
Easy now? :)

rylan76 11-28-2008 08:20 AM

Hi Dive, Colucix

This

Quote:

Originally Posted by dive (Post 3357771)
Code:

ext=`echo ${base%}|awk -F . '{print $NF}'`

just results in the nothing being assigned to the $ext bash variable....

e. g.

Code:

[rylan@development ~]$ prozget.sh http://www.google.com.abc.def/tzaneen.xls
xls
tzaneen

[rylan@development ~]$

where I changed

Code:

echo ${file_base%}|awk -F . '{print $NF}'
into

Code:

ext=`echo ${base%}|awk -F . '{print $NF}'`
echo $ext

I've also tried

Code:

ext="`echo ${base%}|awk -F . '{print $NF}'`"
ext=$"`echo ${base%}|awk -F . '{print $NF}'`"
ext=$("`echo ${base%}|awk -F . '{print $NF}'`")

with no luck at all...

Thanks for the help anyway... I had no idea this was so incredibly tough to do!

rylan76 11-28-2008 08:23 AM

Dive and Colucix

Thanks...

[high embarrassment factor]
I had my variable reference wrong Dive... your suggestion worked.

Thanks Colucix! If you remove the idiot from the equation, your suggestions worked fine...
[/high embarrassment factor]

THANK YOU!!

colucix 11-28-2008 08:27 AM

Ok. Let's start from the beginning. You launch a script (prozget.sh) and pass a URL as argument. What do you want to put exactly inside the ext variable?

EDIT: Ok... didn't see your last message before posting. There is no idiot in the equation, just some hurry! ;)

rylan76 11-28-2008 08:46 AM

Ok but thanks again anyway.

The whole idea of the script is to eventually call the prozilla downloader binary. The script first checks if the file you will download already exists in the directory you are calling the script in. If it is, it fudges the name of the file and renames it to the fudged name, THEN calls prozilla on the download. E. g. you will most likely not accidentally overwrite a file with a name that is the same of the file you are prozilla'ing down off some server somewhere.

Here's my final script, and it works - thanks to you guys' help!

Call with, for example,

Code:

filename="$1"
file_base=$(basename ${filename})
if [ -f ${file_base} ]; then
    #if the file exists already
    filename="${file_base%.*}"
    ext=`echo ${file_base%}|awk -F . '{print $NF}'` #THANKS to Colucix and Dive!
    fudge=`echo $RANDOM` #THANKS to Colucix and Dive!
    underscore="_"
    fudge=$underscore$fudge
    dot="."
    newfile=$filename$fudge$dot$ext
    echo $newfile
    echo $file_base
    mv -i $file_base $newfile
    cmd="proz $1 -k4 --retry-delay=1"
    $cmd
else
    cmd="proz $1 -k4 --retry-delay=1"
    $cmd
fi

Much obliged guys!


All times are GMT -5. The time now is 10:06 PM.