“Commande introuvable” lorsque vous tentez entier de l'égalité dans bash
Ok, c'est probablement va être ultra évident pour quelqu'un qui a passé plus de temps avec bash que j'ai.
Je suis en train d'exécuter ce code:
#!/bin/bash
if ["1" -eq "2"]
then
echo "True"
else
echo "False"
fi
mais quand j'exécute le fichier, il envoie de retour
./test.sh: line 3: 1: command not found
False
Il doit y avoir quelque chose de plus important, je suis absent. J'ai vu des gens utiliser un point-virgule après les crochets, cela ne semble pas faire de différence... :S
[ est-ce un programme, essayez
Tout le monde a déjà dit que vous avez besoin d'un espace après
Ceux entiers. Voir mon commentaire sur RageZ de réponse.
double possible de bash, command not found
which [
et vous verrez. Et vous ne pouvez pas exécuter un programme avec des arguments écrits sans espace... (Et comme d'autres ont répondu, -eq est pour les nombres entiers. Qui il vous dira lors de l'utilisation de [ correct)Tout le monde a déjà dit que vous avez besoin d'un espace après
[
. Le raison, c'est que [
est une commande -- c'est un alias pour test
. Ces jours-ci c'est une commande interne du shell, mais vous pouvez trouver /bin/[
sur la plupart des systèmes.Ceux entiers. Voir mon commentaire sur RageZ de réponse.
double possible de bash, command not found
OriginalL'auteur Margaret | 2010-12-17
Vous devez vous connecter pour publier un commentaire.
yep égaliseur est utilisé uniquement pour l'arithmétique des comparaisons.
pour la comparaison de chaînes, vous devrez utiliser
=
plus vous avez besoin d'espace autour de l'crochets.
[ 10 -gt 2 ]
est vrai. des Comparaisons, d'autre part, peuvent être des chaînes ou des nombres. Un exemple, que vous avez montré. D'autres qui sont spécifiques à des obus de soutien[[
: string:[[ "10" > "2" ]]
(false) ou[[ "10" -gt "2" ]]
(true). Encore une fois, ce n'est pas les citations qui font la différence.Des espaces! Je savais que ça allait être quelque chose de petit. Et les gens se plaindre de python l'utilisation d'un grand espace. :S
OriginalL'auteur RageZ
Vous avez besoin d'ajouter un espace après le
[
et avant la]
comme suit:Cependant, cette manière de faire est obsolète et la meilleure méthode à utiliser est:
l'énoncé qui faites-vous référence à la nécessité d'un espace après
[
ou(( ))
?Oui ... je veux dire sur l'utilisation de (( )) au lieu de [ ] - ce que j'ai lu, le remplacement pour les [] [[ ]] et non (( ))
En bash
(( ))
est utilisé pour l'arithmétique de l'évaluation, ce qui est exactement ce que l'OP veut faire.OriginalL'auteur SiegeX
Essayez d'ajouter des espaces autour de vos supports de:
OriginalL'auteur Michael Burr