Il y a une solution à 1 ligne à la question initiale de l'OP, le nom de base d'un script avec le fichier l'extension dépouillé:
progname=$(tmp=${0%.*} ; echo ${tmp##*/})
Voici une autre, mais, en utilisant un tricheur pour basename:
progname=$(basename ${0%.*})
D'autres réponses sont égarés loin de la question initiale de l'OP et vise à déterminer s'il est possible d'élargir simplement le résultat des expressions avec ${!var}
mais il est venu à travers la limitation que var
doit correspondre explicitement un nom de variable.Cela dit, rien ne vous empêche d'avoir une réponse 1-ligne si vous enchaînez les expressions avec un point-virgule.
ANIMAL=CAT
BABYCAT=KITTEN
tmp=BABY${ANIMAL} ; ANSWER=${!tmp} # ANSWER=KITTEN
Si vous voulez faire cela apparaître comme une seule déclaration, vous pouvez imbriquer dans un sous-shell, à savoir
ANSWER=$(tmp=BABY${ANIMAL) ; echo ${!tmp}) # ANSWER=KITTEN
Une utilisation intéressante est celle des travaux indirection sur des arguments d'une fonction bash. Ensuite, vous pouvez imbriquer votre fonction bash appelle à réaliser indirection imbriquée à plusieurs niveaux parce que nous sommes autorisés à faire des commandes imbriquées:
Voici une démonstration de indirection d'une expression:
deref() { echo ${!1} ; }
ANIMAL=CAT
BABYCAT=KITTEN
deref BABY${ANIMAL} # Outputs: KITTEN
Voici une démonstration de plusieurs niveaux indirection par le biais de commandes imbriquées:
deref() { echo ${!1} ; }
export AA=BB
export BB=CC
export CC=Hiya
deref AA # Outputs: BB
deref $(deref AA) # Outputs: CC
deref $(deref $(deref AA)) # Outputs: Hiya
+1 pour la référence de nom de base. –
Si vous utilisez des indices, ils peuvent être corrects? par exemple, 'ARR = (' foo '' bar '' bogus '); i = 0; alors que/bin/true; fais écho $ {ARR [$ i]}; i = (((i + 1)% 3)); fait »qui est évidemment inutile comme code mais fonctionne comme un exemple. –
En fait, ce * est * supporté dans certains cas, au moins dans 'bash' et' ksh'. Cela fonctionne: 'x = yyy; y = xxxyyy; echo $ {y% $ {x}} '. Je pense que le bit important est que l'expansion imbriquée est un argument de l'un des opérateurs. Je n'ai pas vu que c'est très bien documenté, cependant. – twalberg