LinuxQuestions.org
Download your favorite Linux distribution at LQ ISO.
Home Forums Tutorials Articles Register
Go Back   LinuxQuestions.org > Forums > Linux Forums > Linux - Newbie
User Name
Password
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


Reply
  Search this Thread
Old 01-01-2018, 11:47 AM   #1
vincix
Senior Member
 
Registered: Feb 2011
Distribution: Ubuntu, Centos
Posts: 1,240

Rep: Reputation: 103Reputation: 103
understand: bash -c 'set w x y z; IFS=":-;"; echo "$*"'


I'd like to understand the following command:
bash -c 'set w x y z; IFS=":-;"; echo "$*"'
The result is:
w:x:y:z

I'm supposing that a new bash instance is being run, then the variables w, x, y, z are set.

First question: given that we have a $* at the end, that means that it lists all positional parameters. But how do w, x, y and z become parameters if they're variables?

Secondly: Does the :-; assigning for IFS mean that any of the three characters work as delimiters? And the first is chosen by default in this case?

Thirdly: I don't understand exactly how the -c option works in this case. What's its role exactly? I did read the man pages. It says that commands are read from string. Does that mean it simply makes the following commands (set, IFS, echo) possible for that bash instance?
 
Old 01-01-2018, 12:08 PM   #2
rknichols
Senior Member
 
Registered: Aug 2009
Distribution: Rocky Linux
Posts: 4,776

Rep: Reputation: 2212Reputation: 2212Reputation: 2212Reputation: 2212Reputation: 2212Reputation: 2212Reputation: 2212Reputation: 2212Reputation: 2212Reputation: 2212Reputation: 2212
Quote:
Originally Posted by vincix View Post
I'd like to understand the following command:
bash -c 'set w x y z; IFS=":-;"; echo "$*"'
The result is:
w:x:y:z

I'm supposing that a new bash instance is being run, then the variables w, x, y, z are set.

First question: given that we have a $* at the end, that means that it lists all positional parameters. But how do w, x, y and z become parameters if they're variables?
They are not variables. The command "set w x y z" sets the positional parameters $1 through $3 to the values "w", "x", "y", and "z".

Quote:
Secondly: Does the :-; assigning for IFS mean that any of the three characters work as delimiters? And the first is chosen by default in this case?
Yes.

Quote:
Thirdly: I don't understand exactly how the -c option works in this case. What's its role exactly? I did read the man pages. It says that commands are read from string. Does that mean it simply makes the following commands (set, IFS, echo) possible for that bash instance?
When invoked with "-c", bash simply takes the string that follows as a single command line to be executed. It is very much like running
Code:
echo 'set w x y z; IFS=":-;"; echo "$*"' | bash
the principal difference being what the commands within that string will see as their standard input (irrelevant in this case since none of these specific commands make use of stdin).
 
2 members found this post helpful.
  


Reply



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
[SOLVED] Ping fails to a particular IP-address: "Echo Request" received but no "Echo Reply" sundialsvcs Linux - Networking 0 01-19-2017 06:44 PM
[SOLVED] Would like to "echo" a line, "read" reply, then execute the reply: How in bash? UnixAgain Linux - Newbie 6 02-03-2015 08:27 AM
How to set the font-size for "xterm" terminal-emulator (running "bash" shell) ajaygarg Linux - Desktop 1 03-09-2012 12:38 PM
Standard commands give "-bash: open: command not found" even in "su -" and "su root" mibo12 Linux - General 4 11-11-2007 10:18 PM
BASH: How to NOT echo to screen with "if echo $x | grep ".*"; then" eur0dad Programming 9 07-27-2006 02:14 PM

LinuxQuestions.org > Forums > Linux Forums > Linux - Newbie

All times are GMT -5. The time now is 01:57 PM.

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