Antworten:
Sie müssen alle Argumente zurücksetzen. Zum Ändern zB $3:
$ set -- "${@:1:2}" "new" "${@:4}"
Grundsätzlich Sie setzen alle Argumente auf ihre aktuellen Werte, mit Ausnahme des einen (n) , die Sie ändern möchten. set --wird auch von POSIX 7 spezifiziert .
Die "${@:1:2}"Notation wird auf die beiden (daher 2in der Notation) Positionsargumente erweitert, beginnend mit dem Offset 1(dh $1). Es ist eine Abkürzung für "$1" "$2"in diesem Fall, aber es ist viel nützlicher, wenn Sie z "${17}".
eval vorne mitzumachen .
Die Optimierung für die Lesbarkeit und Wartbarkeit, können Sie besser dran , die Zuweisung $1und $2zu sinnvollen Variablen (ich weiß nicht, input_filename = $1und output_filename = $2oder etwas) und dann mindestens eine der Variablen zu überschreiben ( input_filename = 'chintz'), so dass die Eingabe in das Skript unverändert, falls es ist woanders gebraucht.