Je voulais juste requestr s'il y a un commandment qui fonctionnerait sur des obus communs (bash, dash, kornshell)? Il est censé vérifier si la variable de line
contient une partie du path.
if [[ $line =~ "$PWD"$ ]] ;then
Oui, les versions récentes de bash peuvent le faire:
$ pwd /home/terdon $ line="I'm in /home/terdon" $ [[ "$line" =~ "$PWD"$ ]] && echo yes yes
La même syntaxe fonctionne dans zsh et ksh mais pas dans le tiret. Pour autant que je sache, tiret n'a pas de telles capacités.
Notez que votre regex vérifie si la variable $line
se termine par $PWD
. Pour vérifier si $PWD
correspond à n'importe où dans $line
, supprimez le $
:
$ line="I'm in /home/terdon, are you?" $ [[ "$line" =~ "$PWD" ]] && echo yes yes
Dans n'importe quel shell compatible POSIX, vous pouvez faire:
case $line in (*"$PWD"*) # whatever your then block had ;;esac
Cela fonctionne dans bash
, dash
, et à peu près n'importe quel autre shell que vous pouvez nommer.
Il peut également être utilisé pour gérer de multiples possibilités facilement. Par exemple:
case $line in (*"$PWD"*) echo \$PWD match\! ;; (*"$OLDPWD"*) echo \$OLDPWD match\! ;; (*) ! echo no match\! ;;esac
Vous pouvez également utiliser l'alternance:
case $line in (*"$PWD"*|*"$OLDPWD"*) echo '$OLDPWD|$PWD match!' ;;esac
Notez l'utilisation de la citation ci-dessus:
case $line ...
case
ne sera pas partagé sur $IFS
ou sera utilisé comme model pour le nom de file gen. Ceci est similaire à la façon dont l'argument de gauche dans un [[
test est traité. (*"$PWD"*)
$IFS
ou de nom de file – une extension non-cotée ne sera ni divisée ni glob. $PWD
contenait un *
et n'était pas cité, il serait interprété comme un object pattern et non comme un littéral *
à searchr.