Stockage de la sortie de la command dans la variable shell

J'ai une opération en utilisant cut que je voudrais affecter le résultat à une variable

 var4=echo ztemp.xml |cut -f1 -d '.' 

J'obtiens l'erreur:

ztemp.xml n'est pas une command

La valeur de var4 n'est jamais assignée; J'essaye de lui assigner la sortie de:

 echo ztemp.xml | cut -f1 -d '.' 

Comment puis je faire ça?

Vous voudrez modifier votre tâche pour lire:

 var4="$(echo ztemp.xml | cut -f1 -d '.')" 

La construction $(…) est connue sous le nom de susbtitution de command .

En fonction du shell utilisé, vous pouvez utiliser l'extension de parameters. Par exemple dans bash :

  ${parameter%word} ${parameter%%word} Remove matching suffix pattern. The word is expanded to produce a pattern just as in pathname expansion. If the pattern matches a trailing portion of the expanded value of parameter, then the result of the expansion is the expanded value of parameter with the shortest matching pattern (the ``%'' case) or the longest matching pattern (the ``%%'' case) deleted. If parameter is @ or *, the pattern removal operation is applied to each posi‐ tional parameter in turn, and the expansion is the resultant list. If parameter is an array variable subscripted with @ or *, the pattern removal operation is applied to each member of the array in turn, and the expansion is the resultant list. 

Dans votre cas cela signifierait faire quelque chose comme ceci:

 var4=ztemp.xml var4=${var4%.*} 

Notez que le caractère # se comporte de la même manière sur la partie préfixe de la string.

Ksh, Zsh et Bash offrent tous une autre syntaxe, peut-être plus claire:

 var4=$(echo ztemp.xml | cut -f1 -d '.') 

Les backticks (aka "grave accent") sont illisibles dans certaines fonts. La syntaxe $(blahblah) est beaucoup plus évidente au less.

Notez que vous pouvez placer des valeurs dans une command read dans certains shells:

 ls -1 \*.\* | cut -f1 -d'.' | while read VAR4; do echo $VAR4; done 

C'est encore une autre façon d'assigner une variable, bonne à utiliser avec certains éditeurs de text qui ne peuvent pas mettre correctement en valeur chaque code complexe que vous créez.

 read -r -d '' str < <(cat somefile.txt) echo "${#str}" echo "$str"