Can I use read to read content of a variable


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Can I use read to read content of a variable
# 8  
Old 03-25-2009
Quote:
Originally Posted by mjd_tech
Oops, I forgot to quote ALL the vars...

With a couple of exceptions, variables don't need to be quoted when they are assigned, only when they are expanded.
Quote:

Ksh version:
Code:
#!/bin/ksh
IFS="~"


There is an exception; the tilde does need to be quoted or it will expand to the user's home directory.
Quote:
Code:
VAR1="1~2~3~4"

echo "$VAR1" | read a b c d
echo "$a $b $c $d"
echo "$a"

# Result
1 2 3 4
1

Bash / Dash version (no pipe, no brackets)
Code:
#!/bin/sh
IFS="~"
VAR1="1~2~3~4"

read a b c d <<EOF
$(echo "$VAR1")

No need for echo and command substitution:

read a b c d <<EOF
$VAR1
Quote:
Code:
EOF
echo "$a $b $c $d"
echo "$a"

# Result
1 2 3 4
1

  • The Bash version works in ksh
  • The ksh version does not work in Bash.
This is because Bash creates a subshell for the last process in a pipeline, in this case the read statement.

The only shell that doesn't execute the last element of a pipeline in a subshell is ksh; even pdksh executes it in a subshell.
Quote:
Thus, the variables a b c d would only be visible to the subshell. I used brackets in the earlier Bash example to group read and echo commands in the same subshell.

In this example, I used a "here document" to feed the read command, instead of a pipe. Thus, the read command does not happen in a subshell, and the a b c d variables are visible to the rest of the script.

I hardly ever use here documents. I would do this:

Code:
IFS='~'
VAR1=1~2~3~4
set -f
set -- $VAR1
a=$1 b=$2 c=$3 d=$4

It works in all shells.
# 9  
Old 03-26-2009
This has all been very helpful....the following is what I ended up with and it works great. I will be using this to parse out array elements that are delimited. Thanks!

#!/bin/ksh
VAR1=A~B~C~D
set $(IFS='~'; echo $VAR1)
echo $1 $2 $3 $4

Resulting in:
A B C D
# 10  
Old 03-26-2009
cfajohnson : I didn't see your reply until after I posted....I really like your solution because it allows me to parse the variable into the variable names that I want.

Here's my solution:
#!/bin/ksh
VAR1=A~B~C~D
read fld1 fld2 fld3 fld4 <<EOF
$(IFS="~"; echo $VAR1)
EOF
echo $fld1 $fld2 $fld3 $fld4
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

I want to read the content of a specific folder

Why does not work a cd in a shell schript file. How do you get to run it? I use these code: #!/bin/sh cd workspace array=($(ls -d */)) echo ${array} But it doesn't change to workspace editby bakunin: please user CODE-tags as required by the rules. Thank you. (12 Replies)
Discussion started by: Linuxmann
12 Replies

2. Shell Programming and Scripting

cut the variable from the line and use it to find the file and read the content of that file

Hi, I am working on one script..I am having files in the below format file 1 (each line is separated with : delimeter) SPLASH:SPLASH:SVN CIB/MCH:MCH:SVN Now I want from file 1 that most left part of the first line will store in... (6 Replies)
Discussion started by: rohit22hamirpur
6 Replies

3. Shell Programming and Scripting

Read a text file and print the content..

hello all i request you to give the solution for the following problem.. I want read the text file.and print the contents character by character..like if the text file contains google means..i want to print g go goo goog googl google like this Using unix Shell scripting... ... (7 Replies)
Discussion started by: samupnl
7 Replies

4. Shell Programming and Scripting

How to read file and only output certain content

Hi - I have a file containing data like :- cn=tommy,cn=users,c=uk passwordexpirydate=20100530130623z cn=jane,cn=users,c=uk passwordexpirydate=20100423140734z cn=michael,cn=users,c=uk passwordexpirydate=20100331020044z I want to end up with a file that looks like:-... (6 Replies)
Discussion started by: sniper57
6 Replies

5. Shell Programming and Scripting

read file content

i have one file abhi.txt its contents are home8/mc09ats/UnixCw/backup/file1 home8/mc09ats/file2 i want to read this content of file using while loop.. in this i want to seperate the content as follows path=home8/mc09ats/UnixCw/backup file=file1 echo path echo file can you... (1 Reply)
Discussion started by: AbhijitIT
1 Replies

6. Shell Programming and Scripting

Read a file content with awk and sed

Hello , I have huge file with below content. I need to read the numeric values with in the paranthesis after = sign. Please help me with awk and sed script for it. 11.10.2009 04:02:47 Customer login not found: identifier=(0748502889) prefix=(TEL) serviceCode=(). 11.10.2009 04:03:12... (13 Replies)
Discussion started by: rmv
13 Replies

7. Shell Programming and Scripting

read a file and use the content for mapping

help me pls.. :( i want to read a mapping file. Below is the content of my mapping file. 6221,189,SMSC1,OMC1,WAP1 6223,188,SMSC2,OMC2,WAP2 so when my program running msisdn="622130302310" while not EOF if substring($msisdn,1,4) == "6221" -- > "6221" read from the file then echo... (0 Replies)
Discussion started by: voidmain
0 Replies

8. Shell Programming and Scripting

How to read the content of the particular file from tar.Z without extracting?

Hi All, I want to read the content of the particular file from tar.Z without extracting. aaa.tar.Z contains a file called one.txt, I want to read the content of the one.txt without extracting. Please help me to read the content of it. Regards, Kalai. (12 Replies)
Discussion started by: kalpeer
12 Replies

9. UNIX for Dummies Questions & Answers

How to read the content of the files in unix script

Hi I need help below is my textfile format look like PO Nbr Ln Item Number Description Qty Order Order Date Due Date Status Reply ID Reply Date Reply Qty P304802 1 K0220040 TSX-3225 C 16.367900 MHz 320379 07/01/2008 29/01/2008 REQ OP304802 02/02/2008 190000 P304802 2 K0220040 TSX-3225 C... (0 Replies)
Discussion started by: thila
0 Replies

10. UNIX for Advanced & Expert Users

Cannot read in variable using read on first try

Hi, My problem is : echo Division read vDivision variable1=`cut -c **something****' echo Do you want to proceed ? read ans I cant seem to read in ans on the first try and have to repeatedly enter the return key. If i remove the ` ` statement its ok but i need that line for... (1 Reply)
Discussion started by: normie
1 Replies
Login or Register to Ask a Question