Il y a quelque temps, je me suis installé aliaspour ce genre de travail. Voici une autre de mes réponses:
Cependant, il peut parfois être possible de séparer l'évaluation et l'exécution de ces déclarations. Par exemple, aliaspeut être utilisé pour pré-évaluer une commande. Dans l'exemple suivant, la définition de variable est enregistrée dans un alias qui ne peut être déclaré avec succès que si la $varvariable qu'elle évalue ne contient aucun octet qui ne correspond pas aux caractères alphanumériques ASCII ou _.
LC_OLD=$LC_ALL LC_ALL=C
for var do val=${var#*=} var=${var%%=*}
alias "${var##*[!_A-Z0-9a-z]*}=_$var=\$val" &&
eval "${var##[0-9]*}" && unalias "$var"
done; LC_ALL=$LC_OLD
evalest utilisé ici pour gérer l'appel du nouveau à aliaspartir d'un contexte varname cité - pas pour l'affectation exactement. Et evaln'est appelé du tout que si la aliasdéfinition précédente réussit, et bien que je sache que de nombreuses implémentations différentes accepteront de nombreux types de valeurs différents pour les noms d'alias, je n'ai pas encore trouvé de shell qui acceptera une complètement vide .
La définition au sein de l'alias est _$varcependant pour, et c'est pour s'assurer qu'aucune valeur d'environnement significative n'est écrasée. Je ne connais pas de valeurs d'environnement remarquables commençant par un _ et c'est généralement une valeur sûre pour une déclaration semi-privée.
Quoi qu'il en soit, si la définition de l'alias réussit, elle déclarera un alias nommé pour $varla valeur de. Et evaln'appellera cela que aliass'il ne commence pas non plus par un nombre - sinon, il evaln'obtient qu'un argument nul. Par conséquent, si les deux conditions sont remplies, evalla aliaset la définition de variable enregistrée dans la aliasest effectuée, après quoi le nouvel alias est rapidement supprimé de la table de hachage.
Aussi au sujet utile aliasdans ce contexte est que vous pouvez imprimer votre travail. aliasaffichera une déclaration de réexécution du coffre-fort pour le shell à double guillemet lorsque cela vous sera demandé.
sh -c "IFS=\'
alias q=\"\$*\" q" -- \
some args which alias \
will print back at us
PRODUCTION
q='some'"'"'args'"'"'which'"'"'alias'"'"'will'"'"'print'"'"'back'"'"'at'"'"'us'