ZSH/Shell variable d'affectation ou d'utilisation
J'utilise ZSH pour mon terminal shell, et alors que je l'ai écrit plusieurs fonctions pour automatiser des tâches, je n'ai jamais vraiment essayé tout ce qui requiert de la fonctionnalité de je suis après à l'heure actuelle.
J'ai récemment écrit un blog à l'aide de Jekyll et je veux automatiser la production de messages de blog, et enfin la mise en ligne des nouveaux produits des fichiers sur mon serveur en utilisant quelque chose comme scp.
Je suis un peu confus au sujet de la variable liaisons/utilisation en ZSH; par exemple:
DATE= date +'20%y-%m-%d'
echo $DATE
correctement les résultats 2011-08-23 comme je l'avais espérer.
Mais quand j'essaie:
DATE= date +'20%y-%m-%d'
FILE= "~/path/to/_posts/$DATE-$1.markdown"
echo $FILE
Il sorties:
2011-08-23
blog.sh: line 4: ~/path/to/_posts/-.markdown: No such file or directory
Et lorsqu'il est exécuté avec ce que j'avais envie que le titre du blog (en ignorant le fait que la chaîne doit être manipulés afin de le rendre plus url amicale et que la voie de chemin/vers n'existe pas)
c'est à dire blog "le titre du blog", sorties:
2011-08-23
blog.sh: line 4: ~/path/to/_posts/-blog title.markdown: No such file or directory
Pourquoi est $DATE d'impression au-dessus de l'appel à la fonction print $FICHIER plutôt que la chaîne est inclus dans $FICHIER?
date +%Y-%m-%d
est plus propre que date +20%y-%m-%d
. date +%F
est encore plus propre. (Cela suppose que votre date
de commande prend en charge ces formats; GNU date, mais d'autres ne peuvent pas.)
OriginalL'auteur HaaR | 2011-08-23
Vous devez vous connecter pour publier un commentaire.
Deux choses vont mal ici.
Tout d'abord, votre premier extrait n'est pas de faire ce que je pense que vous pensez qu'elle est. Essayez de supprimer la deuxième ligne, le
echo
. Elle affiche toujours la date, non? Parce que c':N'est pas une affectation de variable - c'est une invocation de
date
avec un auxiliaire de la variable d'environnement (la syntaxe générale estVAR_NAME=VAR_VALUE COMMAND
). Tu veux dire que c':Votre deuxième extrait de échouera toujours, mais différemment. Encore une fois, vous êtes à l'aide de l'invoquer avec l'environnement de la syntaxe au lieu d'affectation. Tu veux dire:
Je pense que cela devrait faire l'affaire.
Avertissement: alors que je sais bash très bien, j'ai seulement commencé à utiliser zsh récemment; il peut être zshisms à l'œuvre ici que je ne suis pas au courant.
Enfant, j'ai appris mon script shell sur la rue. Sérieusement. Métaphoriquement, mais sérieusement. J'ai été en utilisant une ligne de commande unix sur une base quotidienne depuis 1998, avec parfois peu de script, et j'ai fait des graves de script dans le cadre de mon boulot pour quelques années. Je travaille avec d'autres personnes qui savent de script bien et apprendre d'eux. - Je poser des questions sur les groupes de discussion. J'ai lu les scripts dans les paquets que j'utilise. J'ai lu une bonne documentation, quand je trouve, ce qui pour un script shell, n'est malheureusement pas souvent.
Les trois documents en vaut vraiment la lecture sont à l'inégale mais indispensable Advanced Bash Scripting Guide, le agréablement bon, mais plutôt intimidant Bash Manuel de Référence, et, bien sûr,
man bash
. Vous devriez également lire les excellents conseils de Richard Kettlewell et David Pashley.OriginalL'auteur Tom Anderson
Apprendre ce qu'est un shell appelle "l'expansion". Il en existe plusieurs sortes, réalisée dans un ordre particulier:
L'ordre de la parole de l'expansion est comme suit:
set -f
est en effetNoter que tilde expansion s'effectue uniquement lorsque le tilde est pas cité; ex.:
Et il ne doit y avoir aucun espace autour de la
=
dans les affectations de variables.Depuis que vous avez demandé dans un commentaire où apprendre la programmation shell, il y a plusieurs options:
man zsh
OriginalL'auteur Jens