Review your favorite Linux distribution.
Go Back > Forums > Linux Forums > Linux - Newbie
User Name
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!


  Search this Thread
Old 03-16-2009, 01:46 AM   #1
LQ Newbie
Registered: Mar 2007
Posts: 27

Rep: Reputation: 15
a question about bash programming

> a=b echo hi
> echo $a // why this command does not print 'b'?

thank for you opinion!

Last edited by tianlijian; 03-16-2009 at 01:48 AM.
Old 03-16-2009, 02:38 AM   #2
Registered: Jan 2009
Posts: 165

Rep: Reputation: 44
If you put more than 1 command in the same line - you need a semicolon to separate them:

a=b; echo hi
echo $a; # will print 'b' now

Read the advanced bash scripting guide:
Old 03-16-2009, 02:40 AM   #3
LQ Guru
Registered: Aug 2001
Location: Fargo, ND
Distribution: SuSE AMD64
Posts: 15,733

Rep: Reputation: 681Reputation: 681Reputation: 681Reputation: 681Reputation: 681Reputation: 681
> a=b echo hi
> echo $a // why this command does not print 'b'?

The a=b parameter assignment effects the environment for the echo command on the first line.

In another post, a user was having a problem opening a password protected pdf file. The poster knew the password, but it wasn't accepted. The solution was to change the local that the pdf reader program used by changing the LC_LOCALE variable on the same line preceding the command.

From 3.7.4 of the bash info manual:
   The environment for any simple command or function may be augmented
temporarily by prefixing it with parameter assignments, as described in
*Note Shell Parameters::.  These assignment statements affect only the
environment seen by that command.
Try this out:
function fun1()
   echo $a

a=5 fun1()
echo $a
Also look at:
( a=5; echo $a )
echo $a
However, try these as well; can you figure out the difference?:
$ cat test2
echo $a

$ a=100

$ a=3 ./test2

$ echo $a

# Maybe you weren't expecting the following

$ a=50

$ a=20 echo $a

# Here is a trick to use to see shell parameter expansion at work:
set a=20 echo $a
$ echo -e "$1\t$2\t$3\n"
/bin/bash     a=5     echo    10
As you can see, the $a argument is expanded before the line is run. So it is a constant before bash assigns a=5 to the environment of echo.

One more:
$ testvar=15

$ testvar=10 env | grep testvar
The env command lists the environment variables.

Last edited by jschiwal; 03-16-2009 at 02:42 AM.
Old 03-16-2009, 05:44 AM   #4
LQ Newbie
Registered: Mar 2007
Posts: 27

Original Poster
Rep: Reputation: 15
I understand it now. Thank you very much.

Last edited by tianlijian; 03-16-2009 at 06:17 AM.


Thread Tools Search this Thread
Search this Thread:

Advanced Search

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is Off
HTML code is Off

Similar Threads
Thread Thread Starter Forum Replies Last Post
Bad: help me bash programming , newbie question CheeSen Programming 2 09-02-2008 09:23 PM
bash programming question - hand over variables to another script ppr:kut Linux - General 5 02-09-2008 10:00 AM
Question about bash shell programming walterbyrd Linux - General 1 11-01-2005 09:42 AM
very simple bash programming question!? Thinking Programming 7 06-01-2005 11:07 AM > Forums > Linux Forums > Linux - Newbie

All times are GMT -5. The time now is 04:26 PM.

Main Menu
Write for LQ is looking for people interested in writing Editorials, Articles, Reviews, and more. If you'd like to contribute content, let us know.
Main Menu
RSS1  Latest Threads
RSS1  LQ News
Twitter: @linuxquestions
Open Source Consulting | Domain Registration