2010-07-29 8 views
0

J'essaie de faire un code à travers un script bash mal écrit.À quoi cette expression s'applique-t-elle? (bash shell script)

Je suis venu dans cette déclaration:

FOOBAR_NAME=`date +WeekNo.%W` 

Il n'y a pas une déclaration préalable de l'une des variables RHS dans le script, les lignes précédant cette déclaration.

Ma question est la suivante:

Que resolve FOOBAR_NAME, quand il est utilisé quelques lignes dans le script comme $ FOOBAR_NAME?

Répondre

2

Aucune variable n'est référencée dans le RHS.

L'opérateur backtick (`` ) evaluates its contents and returns the output, similar (identical?) to $() . It's a quick way to write an eval` (dans d'autres langues).

type date +WeekNo.%W dans une coquille. Ce qui est imprimé (en stdout, avec des sauts de ligne se sont effondrés) est ce qui sera stocké dans FOOBAR_NAME.

Notez que l'évaluation se produit une seule fois, ce qui est au cours de la mission. date n'est pas exécutée chaque fois que vous faites référence à FOOBAR_NAME.

+0

+1 pour l'explication .. – morpheous

3

Essayez-le!

$date +WeekNo.%W 
WeekNo.30 
+0

maudis vous et vos pouvoirs Ninja! +1 pour être 33 secondes plus vite que moi. –

+0

lol :-) ... – Karussell

0

Voir man date pour une description de la date commande et ses options de formatage. %W est le numéro de la semaine.

0

Cela utilise une chaîne de format à la commande date pour créer la chaîne qui contient le numéro de semaine. Les backticks exécutent la commande entre eux, les 0; et la ligne assigne le résultat à la variable shell FOOBAR_NAME.

Donc, si vous voulez vraiment savoir ce qu'il fait, il suffit de couper et coller le texte entre le `` dans un shell et l'exécuter.

+0

Il est appelé 'backquotes' – Anders

+2

@Anders, je les appelle des guillemets, et apparemment d'autres comme @Recurse et @ eje211 font aussi bien. – strager

+0

@strager, Ne le rend pas correct le fait? S'il vous plaît lire http://www.opengroup.org/onlinepubs/009695399/utilities/xcu_chap02.html – Anders

0

Vous pouvez trouver la réponse dans man date: Si vous spécifiez un argument commençant par +, le reste de cet argument est considéré comme une chaîne de format. La partie Weekno. est pris à la lettre, le %W fait:

% W numéro de la semaine de l'année, avec lundi comme premier jour de la semaine (00..53)

0

L'opérateur d'affectation ("=") affecte la valeur sur sa partie droite à une variable sur la partie gauche. Ici, la variable est FOOBAR_NAME.

La partie droite est un sous-shell. Les backticks ("` `` ") créent un sous-shell. La sortie de ce sous-shell ira à la variable.

Le sous-shell exécute la commande Unix date. La page de manuel pour toutes les commandes Unix est sur Internet. Il a Unix man page for date. Ici,% W sera remplacé par le numéro de la semaine.Ainsi, la variable reçoit la valeur "WeekNo" plus le numéro de la semaine.