Falls es jemanden interessiert: Nach etwas mehr Herumspielen
habe ich jetzt die beiden weiteren großen Probleme wiederer-
kannt, die mich damals zu „set +H“ verleiteten:
1. Die History wird „umgeschrieben“:
| [tim@vagabond ~]$ echo Test && echo !#:1
| echo Test && echo Test
| Test
| Test
| [tim@vagabond ~]$ echo Test && echo Test
(An dem zweiten Prompt einmal <up> gedrückt.) Das heißt,
wenn ich jetzt „Test“ durch „"Kein Test"“ ersetzen will,
muss ich das zweite „Test“ wieder durch „!#:1“ ersetzen.
2. Die Expansion findet rein auf textlicher Ebene statt:
| [tim@vagabond ~]$ echo "$RANDOM" && echo !#:1
| echo "$RANDOM" && echo "$RANDOM"
| 18183
| 808
| [tim@vagabond ~]$
Das ist meistens nicht das, was ich will, und tendentiell
gefährlich, wenn in einem „word“ etwas geschieht, was nur
einmal ausgeführt werden darf oder bei jedem Aufruf ein
anderes Ergebnis erzeugt.
Daher werde ich „set +H“ zwar aus meiner ~/.bashrc nehmen,
um nicht überrascht zu werden, wenn ich auf anderen Systemen
arbeite, aber für mein ursprüngliches Problem dann wohl doch
bei Mustern à la „(f=file.txt && diff "$f" "/tmp/$f" && …)“
bleiben.
Besten Dank für alle Hinweise,
Tim