Why I get bad bad substitution when using eval?


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Why I get bad bad substitution when using eval?
# 1  
Old 08-19-2011
Why I get bad bad substitution when using eval?

Why I get bad replace when using eval?

Code:
[river@localhost ate]$ map0=( "0"  "0000"  "0") 
[river@localhost ate]$ i=0
 [river@localhost ate]$ eval echo  \${map$i[1]}
 0000 
[river@localhost ate]$ a=`eval echo  \${map$i[1]}`                            !!!error happens!!!
 bash: ${map$i[1]}: bad substitution

How to resolve it ?
Thanks!

Last edited by 915086731; 08-19-2011 at 04:54 AM..
# 2  
Old 08-19-2011
Try as
Code:
a=`eval echo \\${map$i[2]}`
#or the new one
a=$(eval echo \${map$i[1]})

# 3  
Old 08-19-2011
Code:
[river@localhost ate]$ eval echo  \${map$i[1]}
0000
[river@localhost ate]$ a=`eval echo \\${map$i[2]}`
[river@localhost ate]$ echo $a                                       ??not "0000"??
0

The following result is right!
Code:
[river@localhost ate]$ a=$(eval echo \${map$i[1]})
[river@localhost ate]$ echo $a
0000
[river@localhost ate]$


Thanks!
I feel very puzzled, why I must need add '\' more, or add $(). Can you tell me ?
# 4  
Old 08-19-2011
Don't use bash for any fancy programming. But if you want:

Code:
$ a=`eval echo map$i`

$ b=$a[1]

$ c=${!b}

$ echo c
0000

# 5  
Old 08-19-2011
Quote:
Originally Posted by 915086731
Code:
[river@localhost ate]$ eval echo  \${map$i[1]}
0000
[river@localhost ate]$ a=`eval echo \\${map$i[2]}`
[river@localhost ate]$ echo $a                                       ??not "0000"??
0 # <-- thats because we are calling here subscript 2 not 1

The following result is right!
Code:
[river@localhost ate]$ a=$(eval echo \${map$i[1]})
[river@localhost ate]$ echo $a
0000
[river@localhost ate]$

Thanks!
I feel very puzzled, why I must need add '\' more, or add $(). Can you tell me ?
Back-ticks ( a.k.a. grave accents) is considered archaic nowadays. The newer enhanced command substitution $(commands) is recommended instead of `commands`
# 6  
Old 08-19-2011
Thanks very much!
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Bad substitution - ShellCheck says okay

ShellCheck doesn't find any issues with this script. #!/bin/bash # color_meanings: explain meanings of colors used in bash ls eval "$(echo "no:fi:di:ln:pi:so:do:bd:cd:or:mi:su:sg:tw:st:ex" | sed -e 's/:/=/g; s/\;/\n/g')" { IFS=: for i in $LS_COLORS do ... (18 Replies)
Discussion started by: Xubuntu56
18 Replies

2. UNIX for Beginners Questions & Answers

Bad substitution issues.. but why?

i am trying to prepare a train and test dataset, for which i need to randomly split the data into corresponding folders (train,test).. I began on a simple script, but seem to get som weird error messages, that i cannot make sense of?.. what am I doing wrong? #!/bin/bash RED='\033] then... (13 Replies)
Discussion started by: kidi
13 Replies

3. Shell Programming and Scripting

Bad substitution

Cant undestand :) why i have an error on line 2.it is working on my other boxes #!/bin/bash ret=$(echo Q | timeout 5 openssl s_client connect "${1`hostname`}:${2-443}" -ssl3 2> /dev/null) if echo "${ret}" | grep -q 'Protocol.*SSLv3'; then if echo "${ret}" | grep -q 'Cipher.*0000'; then ... (7 Replies)
Discussion started by: kenshinhimura
7 Replies

4. Programming

Make: Bad Substitution

Hi, I have a make file which I try to execute, but it failed when it arrived to the line: for r in ${PIPESTATUS }; do if (($r != 0)); then exit $r; fi;done; With the Error: ""make:/bin/sh: Bad substitution"" Or the Error: "make:${PIPESTATUS[...}: Bad substitution" (Depend on the operating... (3 Replies)
Discussion started by: nadne
3 Replies

5. Shell Programming and Scripting

bad substitution error!

Hi All, I'm building a new shell script but i'm facing a problem with one line which is giving "bad substitution" error. Please assist script lines: #!/bin/sh printf "%s: " "Occurrence DATE (YYYYMMDD)"; read DATE shortdate=${DATE#??} o/p: ./test1: bad substitution This command is... (2 Replies)
Discussion started by: Dendany83
2 Replies

6. UNIX for Dummies Questions & Answers

bad substitution

#!/bin/bash a1=( win 12,01,02,03,04 ) a2=( pre 04,05,06 ) a3=( msn 06,07,08,09 ) Given the above arrays, I want the script to return/echo the following in a loop; win 12,01,02,03,04 pre 04,05,06,07 msn 06,07,08,09 But I can't get it to do as such. I've tried; (2 Replies)
Discussion started by: Muhammad Rahiz
2 Replies

7. Shell Programming and Scripting

bad substitution error in ksh

Hello, In bash I can use the following: TMP=12345 MID=${TMP:1:1} the expected result is: 2 but when using KSH I'm getting a ''bad substitution" error. What is the correct syntaxin ksh? Thanks (2 Replies)
Discussion started by: LiorAmitai
2 Replies

8. Shell Programming and Scripting

bad substitution error in ksh

hi, i created a shell script having the following content: #! /usr/bin/ksh FROM="myemail@domain.com" MAILTO="someemail@domain" SUBJECT="TEST" BODY="/export/home/adshocker/body.txt" ATTACH="/export/home/adshocker/attach.prog" echo $ATTACH ATTACH_NAME="${ATTACH##*/}" echo $ATTACH_NAME... (5 Replies)
Discussion started by: adshocker
5 Replies

9. Shell Programming and Scripting

Array reference - bad substitution

I've created a series of arrays named as follows: row1 row2 row3 . . . row10 Each has 4 elements. I'm trying to echo the array elements out in a for loop. Here's what I have: for ((i=1;i<=10;i++)) do for ((j=1;j<=4;j++)) do eval out=${row`echo $i`} echo -n $out (3 Replies)
Discussion started by: swankgd
3 Replies

10. Shell Programming and Scripting

Bad Substitution

Need Help... I am getting a bad substitution error on my script on a Solaris Server. However the script has been proven to work on HPUX and Solaris servers... #!/usr/bin/sh # # Set the location of the tzupdater.jar file # JAR=/tmp/tzupdater.jar # <<<<< UPDATE THIS LINE... (3 Replies)
Discussion started by: D_Redd74
3 Replies
Login or Register to Ask a Question

Featured Tech Videos