Comparaison de chaîne ne fonctionne pas dans PowerShell fonction de ce que je fais mal?
Je suis en train de faire un alias de git commit
qui enregistre le message dans un fichier texte séparé. Toutefois, si git commit
retourne "nothing to commit (working directory clean)"
, il ne devrait PAS journal en rien le fichier distinct.
Voici mon code. Le git commit
alias fonctionne; la sortie vers un fichier works. Cependant, il enregistre le message n'importe quelle revient de git commit
.
function git-commit-and-log($msg)
{
$q = git commit -a -m $msg
$q
if ($q –notcontains "nothing to commit") {
$msg | Out-File w:\log.txt -Append
}
}
Set-Alias -Name gcomm -Value git-commit-and-log
Je suis à l'aide de PowerShell 3.
Vous devez vous connecter pour publier un commentaire.
$q
contient un tableau de chaîne de chaque ligne de Git la sortie standard (stdout). Pour utiliser-notcontains
vous aurez besoin pour correspondre à la chaîne complète d'un élément d'un tableau, par exemple:Si vous voulez tester une chaîne partielle match essayez le
-match
de l'opérateur. (Remarque: il utilise des expressions régulières et renvoie la chaîne de caractères correspondant.)-match
fonctionne si l'opérande de gauche est un tableau. Vous pouvez utiliser cette logique:Encore une autre option est d'utiliser le
-like
/-notlike
opérateurs. Ces accepter des caractères génériques et ne pas utiliser des expressions régulières. L'élément de tableau qui lui correspond (ou ne correspond pas), seront retournés. Donc, vous pourriez aussi utiliser cette logique:-match
et-like
les opérateurs de travailler si l'opérande de gauche est une simple chaîne de caractères ou un tableau. Si l'opérande de gauche est un tableau, les éléments de correspondance sera retourné et qui peut être utilisé dans un boolean expression de test (non vide résultat sera traduit en vrai). Si l'opérande de gauche est une simple chaîne de caractères, booléen sera directement retourné.Juste une remarque que l' -notcontains opérateur ne veut pas dire "chaîne de caractères ne contient pas un sous-chaîne." Il signifie "collection/tableau ne contient pas un élément". Si le "git commit" commande retourne une chaîne unique, vous pouvez essayer quelque chose comme ceci:
I. e., utiliser le Contient méthode de l'objet de type String, qui retourne $true si une chaîne contient une sous-chaîne.
$q
contient un tableau de chaîne (toutes les lignes à partir de git est stdout)... donc$q.Contains("nothing to commit")
ne fonctionne pas,$q[1].Contains("...")
serait cependant.