Comment vérifier le modèle match en utilisant la commande /bin/sh, pas par /bin/bash
Je suis en utilisant le système Ubuntu shell, pas de bash, et j'ai trouvé le moyen régulier ne peuvent pas travailler:
#!/bin/sh
string='My string';
if [[ $string =~ .*My.* ]]
then
echo "It's there!"
fi
erreur [[: pas trouvé!!!
Que puis-je faire pour résoudre ce problème?
Je sais Bourne shell, Korn shell, bash, zsh, et quelques autres, mais j'ai aucune idée ce shell standard est...
eh bien, je veux dire le système shell /bin/sh j'ai mis à jour la questioin.
Eh bien, POSIX
eh bien, je veux dire le système shell /bin/sh j'ai mis à jour la questioin.
Eh bien, POSIX
sh
serait certainement qualifier comme "standard". Le sh
dans Ubuntu, c'est le tableau de bord, qui certainement s'efforce d'être conforme à POSIX.
OriginalL'auteur harryz | 2014-01-14
Vous devez vous connecter pour publier un commentaire.
La
[[ ... ]]
sont un bash-ism. Vous pouvez faire votre test coque-agnostique en utilisant simplementgrep
normale avec uneif
:OriginalL'auteur Christopher Neylan
Pourquoi utiliser grep pour le simple motif? Éviter d'inutiles fourche par Sh intégré dans la correspondance de moteur:
Il est conforme à POSIX. Bash ont syntaxe simplifiée pour cela:
OriginalL'auteur gavenkoa
Vous pouvez utiliser
expr
:Ce serait de travailler avec les deux
sh
etbash
.Comme une fonction très pratique:
Citant
man expr
:case
est suffisant; etgrep
fait le travail aussi bien, et est probablement plus familier à la plupart des utilisateurs.expr est construire en Bourne shell et beaucoup plus rapide, nous devrions faveur de ce rapport à d'autres méthodes.
OriginalL'auteur devnull
La
${...}
syntaxe effectue l'expansion des variables; de nombreuses formes de ce sont portables (y compris la durée de${foo#bar}
,${foo##bar}
,${foo%bar}
, et${foo%%bar}
, mais quelques-uns ne le sont pas.${!...}
effectue indirects extension variable, qui est un bashism; utiliser eval à la place.${parameter/pattern/string}
effectue modèle de remplacement, qui est un bashism. Voir la section suivante pour obtenir des suggestions sur la fixation de ce.${parameter:offset:length}
effectue sous-chaîne d'extension, qui est un bashism. Voir ci-dessous pour obtenir des suggestions sur la fixation de ce.Variables de tableau ne sont pas portables. Avec un peu de prudence appropriées séparateurs ils peuvent généralement être remplacés par une série de
${foo#bar}
expansions et les sans sensiblement affecter les performances.OriginalL'auteur Wanlong Gao