J'essaie d'utiliser les extensions de paramètre Bash pour modifier la sortie d'une substitution de commande ou d'une autre extension de paramètre.
Les extensions imbriquées suivantes fonctionnent assez bien dans Zsh ; mais entraîne une erreur de "mauvaise substitution" dans Bash :
${${PWD##*/}//trunk/latest}
ou
${$(basename $PWD)//trunk/latest}
la sortie doit être le dernier dossier du $PWD
, remplacé par latest
quand mon répertoire actuel est trunk
donc /home/user/trunk
devrait devenir latest
Existe-t-il un équivalent Bash permettant d'enchaîner les expansions sans s'appuyer sur des variables ou des tuyaux ? Ou est-ce que les expansions Bash autorisent uniquement l'entrée à être une chaîne ou une variable simple ?
Réponse acceptée :
Non, cette imbrication des opérateurs de substitution est unique à zsh
.
Notez qu'avec zsh
comme avec (t)csh
, vous pouvez également faire ${PWD:t:s/trunk/latest/}
.
Bien que bash
prend également en charge ces modificateurs d'historique csh pour l'expansion de l'historique, il ne les prend pas en charge pour ses extensions de paramètres.
Ici avec bash
, utilisez une variable temporaire :
var=${PWD##*/} var=${var//trunk/latest}