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: