2017-12-13 2 views
-1

Ich versuche, ein Skript zu schreiben, das einige Dateien sortiert, und ich habe es funktioniert in der Shell manuell (Debian scheint Strich), aber wenn ich den gleichen Code wie ein Skript I ausführen bekomme "schlechte Substitution" von Zeile 2 und 3;Bad Substitution Fehler von Variablen

#!/bin/bash 
LAST_MONTH="${date +'%Y%m' -d 'last month'}" 
LAST_MONTH_HYPHEN="${date +'%Y-%m' -d 'last month'}" 

Alles, was ich schien so fand auf verschiedenen Schalen bezogen zu werden, also habe ich als #!/bin/bash#!/bin/sh auch versucht. Ich habe auch versucht, das Skript als ./filesorter.sh, bash filesorter.sh und sh filesorter.sh läuft, und jede Permutation gibt mir eine gewisse Variation auf dem gleichen „schlechte Substitution“ Thema

filesorter.sh: line 2: ${date +'%Y%m' -d 'last month'}: bad substitution 
filesorter.sh: line 3: ${date +'%Y-%m' -d 'last month'}: bad substitution 

Antwort

2

Ändern Sie die geschweiften Klammern zu Klammern.

LAST_MONTH="$(date +'%Y%m' -d 'last month')" 
LAST_MONTH_HYPHEN="$(date +'%Y-%m' -d 'last month')" 

Curly Klammern sind für variable Substitution, wie in ${var} entspricht $var. Die Klammern sind für die Befehlsersetzung wie in $(command arg1 arg2).

Shellcheck ist ein großartiges Werkzeug zum Überprüfen der Syntax von Shell-Skripten. Wenn Ihr Skript fütterte es sagt:

SC2154: date verwiesen wird, aber nicht zugewiesen (für die Ausgabe von Befehlen verwenden "$(date ...)").