Vous devez vous rappeler que le scripting shell est moins un langage qu'une collection de commandes. Instinctivement, vous pensez que ce "langage" vous oblige à suivre une if
avec un [
o un [[
. Ces deux commandes ne sont que des commandes qui renvoient un état de sortie indiquant le succès ou l'échec (comme toutes les autres commandes). Pour cette raison, j'utiliserais grep
et non le [
commandement.
Fais-le :
if grep -q foo <<<"$string"; then
echo "It's there"
fi
Maintenant que vous pensez à if
comme testant l'état de sortie de la commande qui la suit (avec un point-virgule), pourquoi ne pas reconsidérer la source de la chaîne que vous testez ?
## Instead of this
filetype="$(file -b "$1")"
if grep -q "tar archive" <<<"$filetype"; then
#...
## Simply do this
if file -b "$1" | grep -q "tar archive"; then
#...
El -q
permet à grep de ne rien afficher, puisque nous ne voulons que le code de retour. <<<
fait en sorte que l'interpréteur de commandes développe le mot suivant et l'utilise comme entrée de la commande, une version d'une ligne de la commande <<
ici le document (je ne sais pas si c'est une norme ou un Bashism).
4 votes
Bonjour, si les chaînes vides sont fausses, pourquoi considérez-vous que c'est maladroit ? C'est le seul moyen qui a fonctionné pour moi, malgré les solutions proposées.
1 votes
Vous pouvez utiliser le
expr
commande ici4 votes
En voici un pour les shells posix : stackoverflow.com/questions/2829613/