There is the command eval available, that does the trick:
1 2 3 4 5 6 7 8 9 10 11 |
#!/bin/bash a=10 b='$a' echo $b # $a eval $b # bash: 10: command not found eval 'echo $b' # $a eval echo $b # 10 eval "echo $b" # 10 echo `eval echo $b` # 10 |
Sometimes you can’t use single-quotes. In this case:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
#!/bin/bash a=10 b=a echo $b # a echo $$b # 29785b echo \$$b # $a eval echo \$$b # 10 # note that: echo `eval echo $b` # a echo `eval echo \$$b` # 29785b # but: echo $(eval echo \$$b) # 10 # or: echo `eval echo \\$\$b` #10 |
Let’s go a bit further:
1 2 3 4 5 6 7 |
#!/bin/bash a=10 b='$a' c='$b' eval echo $(eval echo `echo $c`) # 10 |
Without single-quotes:
1 2 3 4 5 6 7 |
#!/bin/bash a=10 b=a c=b eval echo \$$(eval echo \$$c) # 10 |
Perhaps to be continued…
Home
Contacts
Downloads
RoR
Linux
Notes
ERR
Servers
Русский
Comment it: