Pourquoi awk arithmétique ne fonctionne pas?
-
29-10-2019 - |
Question
J'ai un script simple:
#!/bin/sh
#NOTE - this script does not work!
#column=${1:-1}
column=1+1
awk '{print $'$column'}'
Mais quand courir
ls -la | ~/test/Column.sh
Je reçois toujours
1
1
1
1
Quel est le problème?
La solution
Votre script est équivalent à:
awk '{print $1+1}'
Awk essaie d'en ajouter un à la première colonne de la sortie de ls -al
Dans votre exemple, qui est le type de fichier et les bits de mode. Ce n'est pas un nombre, il est donc converti en 0. Ajoutez-en un à zéro, et vous obtenez votre sortie.
Voir ici:
Des chaînes qui ne peuvent pas être interprétées comme des nombres valides se convertissent en zéro.
Si vous souhaitez que le shell calcule le numéro, essayez:
column=$(expr 1 + 1)
ou même
column=$((1 + 1))
Autres conseils
Si c'est un pur obus Bourne, au lieu de:
column=1+1
Essaye ça:
column=`expr 1+1`
Si c'est bash, ça devrait être:
column=$[1+1]
Vois ici: http://linuxreviews.org/beginner/bash_gnu_bourne-again_shell_reference/#toc12
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow