[linux-l] bash und eval

Ivan Villanueva iv at artificialidea.com
Mo Mai 26 17:29:14 CEST 2003


Danke, toll erklährt !
Ich habe das ergebniss der folgende Script auch interesant gefunden:
#!/bin/bash
CMD1='echo "a   b"'
CMD2="echo 'a   b'"
$CMD1
$CMD2
eval $CMD1
eval "$CMD1"
eval $CMD2
eval "$CMD2"

Gruß,
Iván.

> wenn man einfach nur $CMD hinschreibt, macht die shell word splitting und
> nimmt das ergebnis direkt als parameter für execv() (naja, bildlich
> gesprochen), anstatt diverse expansions und schließlich quote removal
> anzuwenden, wie es bei einer normalen kommandointerpretation ist.
> 
> generell korrekt wäre im übrigen eval "$CMD", nicht eval $CMD, um das
> word splitting vor der interpretierung zu verhindern (versuch mal
> CMD='echo "a   b"').



Mehr Informationen über die Mailingliste linux-l