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?

Était-ce utile?

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
scroll top