Regarding command substitution


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Regarding command substitution
# 1  
Old 04-09-2014
Regarding command substitution

Oracle Linux 5.6, 64-bit
Given the following snippet
Code:
wrkvar=`sqlplus -s / as sysdba <<EOF
set echo off feedback off head off trimsp on
select count(*) from v\$parameter
where name in ('db_file_name_convert','log_file_name_convert')
and value is not null;
EOF`
echo wrkvar=$wrkvar

Produces the following results

Code:
wrkvar=select count(*) from v db_refresh db_refresh.sav doit ERROR at line 1: ORA-00942: table or view does not exist

Whereas taking the entire sqlplus block out of the command substitution (just executing it) runs as expected. Also, using the other method of command substitution works as expected:
Code:
wrkvar=$(sqlplus -s / as sysdba <<EOF
set echo off feedback off head off trimsp on
select count(*) from v\$parameter
where name in ('db_file_name_convert','log_file_name_convert')
and value is not null;
EOF)
echo wrkvar=$wrkvar

produces
Code:
wrkvar= 2

It would appear that something about the first variant doesn't like the escaping of the $ (v\$parameter). Obviously a gap in my understanding ... Smilie
# 2  
Old 04-10-2014
I don't know sqlplus and therefore I don't know what effect you hope to achieve. I also don't understand your need to use use backquotes. But try doubling the backslash.

Code:
bash-3.1$
bash-3.1$ abc="kkjhkjhkjhkj"
bash-3.1$ echo ` echo a\b v\$abc`
ab vkkjhkjhkjhkj
bash-3.1$ echo $( echo a\b v\$abc)
ab v$abc
bash-3.1$ echo ` echo a\b v\\$abc`
ab v$abc
bash-3.1$
bash-3.1$

This User Gave Thanks to Perderabo For This Post:
# 3  
Old 04-10-2014
in order to avoid parameter expansion within the 'here-doc' (\$parameter) quote the "EOF".
Doing 'man bash" yields the following:
Code:
       The format of here-documents is:

              <<[-]word
                      here-document
              delimiter

       No parameter expansion, command substitution, arithmetic expansion, or pathname expansion is
       performed  on  word.   If  any characters in word are quoted, the delimiter is the result of
       quote removal on word, and the lines in the here-document are  not  expanded.   If  word  is
       unquoted,  all lines of the here-document are subjected to parameter expansion, command sub‐
       stitution, and arithmetic expansion.  In the latter case, the character sequence  \<newline>
       is ignored, and \ must be used to quote the characters \, $, and `.

This User Gave Thanks to vgersh99 For This Post:
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Substitution within string command

I have the following code: strfuture=abcdefghi ver=${strfuture:${count}:1} mj7777_ver=${ver} start_mj7777_iteration let count=count+1 When it is executed I get bad substitution. The same if I use ver=${strfuture:$count:1} mj7777_ver=${ver}... (6 Replies)
Discussion started by: Bruble
6 Replies

2. Shell Programming and Scripting

Command substitution in echo

a=1 b1=unix echo $b`$a` The above code is not working. Instead of printing the variable b1 using 'echo $b1', how to use variable 'a' to print 'b1' (1 Reply)
Discussion started by: thulasidharan2k
1 Replies

3. UNIX for Advanced & Expert Users

Help with command substitution in C program

Hi, I want to know if there's a cleaner way for assigning output of a unix command to a variable in C program . Example : I execute dirname fname and want the output to be assigned to a variable dname . Is it possible . I knew u can redirect the output to a file and then reread assigning... (5 Replies)
Discussion started by: royalbull
5 Replies

4. Shell Programming and Scripting

Repeating Substitution Command on VI

Hello Folks, how to write a command on vi that allow to repeat last substitution command? Here what I want to do : 1 2 3 1 2 3 1 2 3 :.,+2s/\n/ /And I obtain : 1 2 3 1 2 3 1 (5 Replies)
Discussion started by: gogol_bordello
5 Replies

5. UNIX for Dummies Questions & Answers

read command - using output from command substitution

Hey, guys! Trying to research this is such a pain since the read command itself is a common word. Try searching "unix OR linux read command examples" or using the command substitution keyword. :eek: So, I wanted to use a command statement similar to the following. This is kinda taken... (2 Replies)
Discussion started by: ProGrammar
2 Replies

6. UNIX for Dummies Questions & Answers

sed insert command and variable expansion/command substitution

I know this script is crummy, but I was just messing around.. how do I get sed's insert command to allow variable expansion to show the filename? #!/bin/bash filename=`echo $0` /usr/bin/sed '/#include/ { i\ the filename is `$filename` }' $1 exit 0 (8 Replies)
Discussion started by: glev2005
8 Replies

7. UNIX for Dummies Questions & Answers

Command substitution within an echo

I'm trying to get this to work and I'm not really sure how to do it. echo $x | awk '{print $NF}' MODIFIEDThe output I'm trying to get should look like: dir1 MODIFIED Where dir1 will be the result of: $x |awk '{print $NF}'I'm sure there's something I'm supposed to put around that part... (3 Replies)
Discussion started by: ewoods
3 Replies

8. Shell Programming and Scripting

Difference between "Command substitution" and "Process substitution"

Hi, What is the actual difference between these two? Why the following code works for process substitution and fails for command substitution? while IFS= read -r line; do echo $line; done < <(cat file)executes successfully and display the contents of the file But, while IFS='\n' read -r... (3 Replies)
Discussion started by: royalibrahim
3 Replies

9. Shell Programming and Scripting

complex command substitution

hi, I have to execute this line below from within a shell script; simply backquoting it is not doing the trick; it is mangling up all the options; but when i type it out on a command line, it executes cleanly. Please help me in getting this right; $ vlc -I dummy --sout='#transcode{vcodec=mp4v,... (5 Replies)
Discussion started by: spopuri
5 Replies

10. Shell Programming and Scripting

Substitution of last command

"Is there any substituation of last command or script syntax which can be used as a user. As far I know the "last" command is being used to display information about previous logins. A member of adm group or the user adm can execute it only. Thanks in advance for your usual help. Ghazi (6 Replies)
Discussion started by: ghazi
6 Replies
Login or Register to Ask a Question