2017-05-24 4 views
2

Diese Zeile in einer Bash-Datei für sechs Monate gearbeitet hat:Bash: Syntaxfehler in Ausdruck (Fehler-Token sind ...)

SCRATCH_FOLDER_NAME="${SCRATCH_FOLDER_NAME:scratch--folder}" 

und heute beschlossen, nicht mehr zu sein, mit diesem Fehler:

SCRATCH_FOLDER_NAME: scratch--folder: syntax error in expression (error token is "folder") 

Was bedeutet das?

Als Referenz ist hier das komplette Skript:

#!/bin/bash 

     SHIMMERCAT_SCRATCH_FOLDER_NAME="${SHIMMERCAT_SCRATCH_FOLDER_NAME:shimmercat-scratch--folder}" 
REDIS_UNIX_SOCKET="/unpriv/$SHIMMERCAT_SCRATCH_FOLDER_NAME/redis.sock" 

if [[ -z ${DONT_RUN_REDIS+x} ]]; then 

    chown shimmercat:shimmercat $SHIMMERCAT_SCRATCH_FOLDER_NAME 

    ... 
fi 
+0

Vielleicht versuchen 'chown shimmercat: shimmercat" $ SHIMMERCAT_SCRATCH_FOLDER_NAME "' (mit der Erweiterung in '" "')? In welcher Zeile ist der Fehler? – cxw

+0

Der Fehler ist in Zeile 3, die ich zuerst in der Frage geschrieben habe. – dsign

+1

Ich kann den Fehler sowohl in 3.2 als auch in 4.4 reproduzieren, wenn 'SCRATCH_FOLDER_NAME' * eingestellt * ist. Es ist auch möglich, dass 4.0 einen Bug eingeführt hat, der es legal machte, und dieser Bug wurde erst mit 4.4 behoben. Ich habe keine älteren Installationen verfügbar, um diese Theorie zu testen. – chepner

Antwort

3

"${SCRATCH_FOLDER_NAME:scratch--folder}" ist keine korrekte Parameter Expansion. Berücksichtigen Sie Folgendes, wobei Komma das Trennzeichen ist:

# Get string before first matching delimeter 
${var%%,*} 

# Get string before last matching delimeter 
${var%,*} 

# Get string after first matching delimeter 
${var#*,} 

# Get string after last matching delimeter 
${var##*,} 

Für wie es funktionierte, bin ich mir nicht sicher. Here ist eine gute Referenz für die verschiedenen Arten von Parametererweiterungen.

+0

Yepp, du hast vollkommen recht. Ich hätte ein "-" hinzufügen müssen, wie zum Beispiel: 'SHIMMERCAT_SCRATCH_FOLDER_NAME =" $ {SHIMMERCAT_SCRATCH_FOLDER_NAME: -shimmercat-scratch-folder} "'. Wie es vorher funktioniert hat, habe ich keine Ahnung :-( – dsign

Verwandte Themen