Linux - Newbie This Linux forum is for members that are new to Linux.
Just starting out and have a question?
If it is not in the man pages or the how-to's this is the place! |
Notices |
Welcome to LinuxQuestions.org, a friendly and active Linux Community.
You are currently viewing LQ as a guest. By joining our community you will have the ability to post topics, receive our newsletter, use the advanced search, subscribe to threads and access many other special features. Registration is quick, simple and absolutely free. Join our community today!
Note that registered members see fewer ads, and ContentLink is completely disabled once you log in.
Are you new to LinuxQuestions.org? Visit the following links:
Site Howto |
Site FAQ |
Sitemap |
Register Now
If you have any problems with the registration process or your account login, please contact us. If you need to reset your password, click here.
Having a problem logging in? Please visit this page to clear all LQ-related cookies.
Get a virtual cloud desktop with the Linux distro that you want in less than five minutes with Shells! With over 10 pre-installed distros to choose from, the worry-free installation life is here! Whether you are a digital nomad or just looking for flexibility, Shells can put your Linux machine on the device that you want to use.
Exclusive for LQ members, get up to 45% off per month. Click here for more info.
|
|
11-28-2008, 08:53 AM
|
#1
|
Senior Member
Registered: Apr 2004
Location: Potchefstroom, South Africa
Distribution: Fedora 17 - 3.3.4-5.fc17.x86_64
Posts: 1,552
Rep:
|
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?
|
|
|
11-28-2008, 09:00 AM
|
#2
|
LQ Guru
Registered: Sep 2003
Location: Bologna
Distribution: CentOS 6.5 OpenSuSE 12.3
Posts: 10,509
|
Use command substitution. Better with the $(...) syntax, unless you want your code be portable to the Bourne Shell.
|
|
|
11-28-2008, 09:05 AM
|
#3
|
Senior Member
Registered: Apr 2004
Location: Potchefstroom, South Africa
Distribution: Fedora 17 - 3.3.4-5.fc17.x86_64
Posts: 1,552
Original Poster
Rep:
|
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?
|
|
|
11-28-2008, 09:07 AM
|
#4
|
Senior Member
Registered: Apr 2004
Location: Potchefstroom, South Africa
Distribution: Fedora 17 - 3.3.4-5.fc17.x86_64
Posts: 1,552
Original Poster
Rep:
|
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
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...!
Last edited by rylan76; 11-28-2008 at 09:11 AM.
|
|
|
11-28-2008, 09:15 AM
|
#5
|
Senior Member
Registered: Aug 2003
Location: UK
Distribution: Slackware
Posts: 3,467
Rep:
|
Code:
ext=`echo ${base%}|awk -F . '{print $NF}'`
|
|
|
11-28-2008, 09:18 AM
|
#6
|
LQ Guru
Registered: Sep 2003
Location: Bologna
Distribution: CentOS 6.5 OpenSuSE 12.3
Posts: 10,509
|
Quote:
Originally Posted by rylan76
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
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?
|
|
|
11-28-2008, 09:20 AM
|
#7
|
Senior Member
Registered: Apr 2004
Location: Potchefstroom, South Africa
Distribution: Fedora 17 - 3.3.4-5.fc17.x86_64
Posts: 1,552
Original Poster
Rep:
|
Hi Dive, Colucix
This
Quote:
Originally Posted by dive
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!
Last edited by rylan76; 11-28-2008 at 09:22 AM.
|
|
|
11-28-2008, 09:23 AM
|
#8
|
Senior Member
Registered: Apr 2004
Location: Potchefstroom, South Africa
Distribution: Fedora 17 - 3.3.4-5.fc17.x86_64
Posts: 1,552
Original Poster
Rep:
|
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!!
Last edited by rylan76; 11-28-2008 at 09:25 AM.
|
|
|
11-28-2008, 09:27 AM
|
#9
|
LQ Guru
Registered: Sep 2003
Location: Bologna
Distribution: CentOS 6.5 OpenSuSE 12.3
Posts: 10,509
|
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!
Last edited by colucix; 11-28-2008 at 09:28 AM.
|
|
|
11-28-2008, 09:46 AM
|
#10
|
Senior Member
Registered: Apr 2004
Location: Potchefstroom, South Africa
Distribution: Fedora 17 - 3.3.4-5.fc17.x86_64
Posts: 1,552
Original Poster
Rep:
|
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!
Last edited by rylan76; 12-01-2008 at 04:27 AM.
|
|
|
All times are GMT -5. The time now is 04:56 PM.
|
LinuxQuestions.org is looking for people interested in writing
Editorials, Articles, Reviews, and more. If you'd like to contribute
content, let us know.
|
Latest Threads
LQ News
|
|