I'm trying to put a command in a variable, but the complex cases always
fail! : http://mywiki.wooledge.org/BashFAQ/050

Eval command and security issues : http://mywiki.wooledge.org/BashFAQ/048

On Mon, May 25, 2015 at 2:33 PM, <d...@yost.com> wrote:

> Configuration Information [Automatically generated, do not change]:
> Machine: x86_64
> OS: linux-gnu
> Compiler: gcc
> Compilation CFLAGS:  -DPROGRAM='bash' -DCONF_HOSTTYPE='x86_64'
> -DCONF_OSTYPE='linux-gnu' -DCONF_MACHTYPE='x86_64-unknown-linux-gnu'
> -DCONF_VENDOR='unknown' -DLOCALEDIR='/usr/local/bash/4.3.39/share/locale'
> -DPACKAGE='bash' -DSHELL -DHAVE_CONFIG_H   -I.  -I../bash-4.3
> -I../bash-4.3/include -I../bash-4.3/lib   -g -O2
> uname output: Linux s6.millcomputing.com 2.6.32-504.16.2.el6.x86_64 #1
> SMP Wed Apr 22 06:48:29 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
> Machine Type: x86_64-unknown-linux-gnu
>
> Bash Version: 4.3
> Patch Level: 39
> Release Status: release
>
> Description:
>
> # Echo the arguments, then execute them as a command.
> function echodo() {
>   if [[ -n $ZSH_VERSION ]] ; then
>     echo "[ ${(q)@} ]"
>     eval    ${(q)@}
>   else
>     echo "[ $@ ]"
>     eval    $@
>   fi
> }
> echodo echo b\ c
> echodo a=b\ c
> echo $a
>
> The result in zsh is:
>   $ echodo echo b\ c
>   [ echo b\ c ]
>   b c
>   $ echodo a=b\ c
>   [ a=b\ c ]
>   $ echo $a
>   b c
>   $
>
> Bash gets an error:
>   $ echodo echo b\ c
>   [ echo b c ]
>   b c
>   $ echodo a=b\ c
>   [ a=b c ]
>   bash: c: command not found
>   $ echo $a
>
>   $
>
> I can't find a way to implement echodo in bash. Apparently this is because
> bash is unable to expand a variable with quoting intact, as zsh can do with
> its (q) expansion flag.
>
> Bash behaves differently in this case::
>
>   $ echodo export a=b\ c
>   [ export a=b c ]
>   $ echo $a
>   b
>   $
>
>
> Repeat-By:
>
>
>
> Fix:
>
>


-- 
Visit serverfault.com to get your system administration questions answered.

Reply via email to