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 2
in 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 $1
und $2
zu sinnvollen Variablen (ich weiß nicht, input_filename = $1
und output_filename = $2
oder 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.