Difference between "set $<var>" and "set -- $<var>"


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Difference between "set $<var>" and "set -- $<var>"
# 1  
Old 04-12-2008
Difference between "set $<var>" and "set -- $<var>"

Hi pros,

Could anyone tell me the actual difference between setting the positional parameters from the variable using the following commands?

Code:
$ var="This is my question"
$ set $var
$ echo $1  --> 'This'
$ echo $2  --> 'is'
  ....
  ....

and

Code:
$ var="This is my question"
$ set -- $var
$ echo $1  --> 'This'
$ echo $2  --> 'is'
  ....
  ....

# 2  
Old 04-12-2008
In the example you show, there is no difference but look at this one...
Code:
$ set one two
$ echo $1
one
$ echo $2
two
$ set -o emacs
$ echo $1
one
$ echo $2
two
$ set -- -o emacs
$ echo $1
-o
$ echo $2
emacs

Big difference between
set -o emacs
and
set -- -o emacs
emacs
$
# 3  
Old 10-26-2008
Quote:
Originally Posted by Perderabo
Big difference between
set -o emacs
and
set -- -o emacs
emacs
$
Then, how about "set - $<var>" ?? (single hypen setting the positional parameters)
for eg: set - mydir/file.cpp --> what is the difference with that of 'set --' ??
# 4  
Old 10-26-2008
It took you 6 months to post a followup question? Oh well...

Code:
$ set one two
 $ set -vx
$ echo hello
echo hello
+ echo hello
hello
$ echo 1 = $1 and 2 = $2
echo 1 = $1 and 2 = $2
+ echo 1 = one and 2 = two
1 = one and 2 = two
$ set -- -o emacs
set -- -o emacs
+ set -- -o emacs
$ echo 1 = $1 and 2 = $2
echo 1 = $1 and 2 = $2
+ echo 1 = -o and 2 = emacs
1 = -o and 2 = emacs
$ echo hello
echo hello
+ echo hello
hello

So, ok I set the x and v option and I'm getting a bunch of output. The "set -- -o emacs" had the usual effect that we discussed above. Now I'll try a "set - -o vi" and see and happens...
Code:
$ set - -o vi
set - -o vi
+ set - -o vi
$ echo 1 = $1 and 2 = $2
1 = -o and 2 = vi
$ echo hello
hello
$

The "set -" had the additional effect of turning off both -v and -x. The "set -" was invented first and at the time, x and v were the only options available and so "set -" turned off all options. Modern thinking frowns on syntax like "set -" and now "set --" is preferred. Modern thinking also frowns on a single item like "set -" having that many effects. Now we have "set +v" to turn off an option. And while "set -v" and "set +v" may seem a little backwards, at least it's now one effect per syntax item and that's progress.

So "set -" is a historical oddity and should be avoided.

I'll check back next April in case you have a further question. Smilie
Login or Register to Ask a Question

Previous Thread | Next Thread

9 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Bash script - Print an ascii file using specific font "Latin Modern Mono 12" "regular" "9"

Hello. System : opensuse leap 42.3 I have a bash script that build a text file. I would like the last command doing : print_cmd -o page-left=43 -o page-right=22 -o page-top=28 -o page-bottom=43 -o font=LatinModernMono12:regular:9 some_file.txt where : print_cmd ::= some printing... (1 Reply)
Discussion started by: jcdole
1 Replies

2. Shell Programming and Scripting

Failure: if grep "$Var" "$line" inside while read line loop

Hi everybody, I am new at Unix/Bourne shell scripting and with my youngest experiences, I will not become very old with it :o My code: #!/bin/sh set -e set -u export IFS= optl="Optl" LOCSTORCLI="/opt/lsi/storcli/storcli" ($LOCSTORCLI /c0 /vall show | grep RAID | cut -d " "... (5 Replies)
Discussion started by: Subsonic66
5 Replies

3. Shell Programming and Scripting

Why awk print is strange when I set FS = " " instead of FS = "\t"?

Look at the following data file(cou.data) which has four fields separated by tab. Four fields are country name, land area, population, continent where it belongs. As for country name or continent name which has two words, two words are separated by space. (Data are not accurately... (1 Reply)
Discussion started by: chihuyu
1 Replies

4. UNIX for Dummies Questions & Answers

Using "mailx" command to read "to" and "cc" email addreses from input file

How to use "mailx" command to do e-mail reading the input file containing email address, where column 1 has name and column 2 containing “To” e-mail address and column 3 contains “cc” e-mail address to include with same email. Sample input file, email.txt Below is an sample code where... (2 Replies)
Discussion started by: asjaiswal
2 Replies

5. Shell Programming and Scripting

awk command to replace ";" with "|" and ""|" at diferent places in line of file

Hi, I have line in input file as below: 3G_CENTRAL;INDONESIA_(M)_TELKOMSEL;SPECIAL_WORLD_GRP_7_FA_2_TELKOMSEL My expected output for line in the file must be : "1-Radon1-cMOC_deg"|"LDIndex"|"3G_CENTRAL|INDONESIA_(M)_TELKOMSEL"|LAST|"SPECIAL_WORLD_GRP_7_FA_2_TELKOMSEL" Can someone... (7 Replies)
Discussion started by: shis100
7 Replies

6. UNIX for Dummies Questions & Answers

Meaning of $var->{"@$row[0]"}=" "; ???

while (my $row = $sth->fetchrow_arrayref) { $var->{"@$row"}=" "; } Can anyone help me understanding above mentioned. i) As per my knowledge $row is taking ARRAY Refernce from the database ii) @$row is containing the value of 0th index of the array, testted the same. but I am not able... (0 Replies)
Discussion started by: jaigs_27
0 Replies

7. UNIX for Dummies Questions & Answers

Explain the line "mn_code=`env|grep "..mn"|awk -F"=" '{print $2}'`"

Hi Friends, Can any of you explain me about the below line of code? mn_code=`env|grep "..mn"|awk -F"=" '{print $2}'` Im not able to understand, what exactly it is doing :confused: Any help would be useful for me. Lokesha (4 Replies)
Discussion started by: Lokesha
4 Replies

8. Programming

Differece between "env" and "set" command

Hi, Please clarify what is the difference between "env" and "set" command. I guess set will display the system variables and user defined variables. Thanks Sweta (1 Reply)
Discussion started by: sweta
1 Replies

9. Shell Programming and Scripting

Problem with "set" and "awk"

Hi, i'm programming on /bin/csh and i need to get the number extracted by this: set ppl_kn = $(awk '{ field = $6 } ; END{ print field }' < ppl_LM_kn.ppl ) and the output is: "Illegal variable name." Please anyone can help me what's wrong? Thanks in advance (2 Replies)
Discussion started by: tmxps
2 Replies
Login or Register to Ask a Question