cmd:eval 

[Note]

eval has to be followed by a command name!

$ type eval
eval is a shell builtin

Multi commands 

cmd='cat -n'
$ echo aaa | $cmd
     1  aaa
cmd='echo $$; cat -n'
$ echo aaa | $cmd
$$; cat -n
cmd='{ echo $$; cat -n; }'
$ echo aaa | $cmd
bash: {: command not found
cmd='cat -n; echo $$; '
echo aaa | $cmd
+ echo aaa
+ cat '-n;' echo '$$;'
cat: invalid option -- ;

$cmd vs. eval "$cmd" 

: Can anyone find an example in which eval would make a difference in this
: code:
: a)
:        read -r cmd < $cmdlist
:        eval "$cmd"
: b)
:        read -r cmd  < $cmdlist
:        $cmd
#!/bin/sh
cat > foo.$$ <<-eof
echo a| echo b
eof
cmdlist=foo.$$
echo eval
read cmd < $cmdlist
eval "$cmd"
echo \!eval
read cmd < $cmdlist
$cmd
rm foo.$$
# gives:
#
eval
b
!eval
a| echo b

documented on: 02-05-99 23:59:04