Bash: Comment faire une extension variable dans une expression arithmétique?
Tout en essayant d'écrire un simple script bash pour aider
avec mon processus de déploiement, j'ai couru à une erreur déroutant:
#!/bin/bash
WEEKDAY=$(date +'%u')
echo $WEEKDAY
DAYS_TO_WEDNESDAY=$((3-$WEEKDAY))
echo $DAYS_TO_WEDNESDAY
Résultats dans:
1
")syntax error: invalid arithmetic operator (error token is "
Le plus étrange c'est que je pourrais jurer que ce
très script a fonctionné parfaitement bien il y a quelques jours.
EDITION (14:58):
Le problème n'était pas le script bash, mais avec l'utilisation de SVN via TortoiseSVN. Le détour par Windows changé EOL marqueurs "CR LF", ce qui entraîne des erreurs de syntaxe de bash. Configuration svn:eol-style -propriété permet d'éviter d'autres problèmes semblables.
Ce script fonctionne sans erreurs ici (et je copie/collé de votre question): $ SEMAINE=$(date +'%u',) $ echo $jour de la SEMAINE 1 $ DAYS_TO_WEDNESDAY=$((3-$la SEMAINE)) $ echo $DAYS_TO_WEDNESDAY 2
Je reçois presque exactement la même erreur si la SEMAINE n'est pas défini lorsque j'ai frappé à la DAYS_TO_WEDNESDAY de calcul: -bash: 3-: erreur de syntaxe: opérande attendue (jeton d'erreur est "-")
Je reçois presque exactement la même erreur si la SEMAINE n'est pas défini lorsque j'ai frappé à la DAYS_TO_WEDNESDAY de calcul: -bash: 3-: erreur de syntaxe: opérande attendue (jeton d'erreur est "-")
OriginalL'auteur Jukka Dahlbom | 2009-03-23
Vous devez vous connecter pour publier un commentaire.
Votre message d'erreur semble indiquer la pollution de vos données avec les CRs.
Remarquez comment le truc qui est censé venir après la fin de votre ligne est au début. C'est probablement parce que votre jeton d'erreur est en fait un CR (qui est un caractère de retour de chariot - un caractère qui indique au terminal de mettre le curseur sur le début de la ligne). Ces personnages sont presque uniquement utilisé par les machines Windows, où ils font partie de fins de ligne.
Je vais supposer que vous travaillez sur une machine windows et que votre commande "date" a donné à la sortie, suivi par "windows" de ligne, qui est en fait un \r\n (retour chariot, saut de ligne). Le $() toujours des bandes de fuite des sauts de ligne, ce qui laisse le \r à la fin causant des problèmes de l'analyse dans votre script.
Ici, la commande suivante génère le message d'erreur sur UNIX:
Pour résoudre le problème, vous avez besoin de se débarrasser de la \r dans vos données. Vous pouvez utiliser le paramètre d'expansion, tr(1).
OriginalL'auteur lhunath
Vous pouvez omettre l' $ à l'intérieur d'une expression arithmétique.
Donc:
OriginalL'auteur slim
Copié et collé votre code et il fonctionne très bien:
Peut-être
$WEEKDAY
eu de mauvaises données?OriginalL'auteur JasonSmith