URL: https://linuxfr.org/forums/programmation-shell/posts/shell-parameter-expansion Title: Shell Parameter Expansion Authors: Skilgannon Date: 2024年03月20日T01:14:08+01:00 License: CC By-SA Tags: Score: 1 Bonjour||soir. Je comprends pas les syntaxes suivantes. Extrait de la documentation bash : https://www.gnu.org/software/bash/manual/bash.html (3.5.3 Shell Parameter Expansion)> Put another way, if the colon is included, the operator tests for both parameter’s existence and that its value is not null; if the colon is omitted, the operator tests only for existence.> > ${parameter:-word}> If parameter is unset or null, the expansion of word is substituted. Otherwise, the value of parameter is substituted.>> ```> # v=123> # echo ${v-unset}> 123> ```>> ${parameter:=word}> If parameter is unset or null, the expansion of word is assigned to parameter. The value of parameter is then substituted. Positional parameters and special parameters may not be assigned to in this way.> > ```> # var=> # : ${var:=DEFAULT}> # echo $var> DEFAULT> ``` Bon déjà pour le premier paragraphe. Si ":" est là le test est "existe et n'est pas nul" sinon c'est uniquement "si existe". Ca ok. Par contre je ne comprends pas la différence entre les deux syntaxes, en gros la partie "Positional parameters and special parameters may not be assigned to in this way." 1) Concernant l'aspect langue (linguistique). Je reconnais que mon anglais est ce qu'il est mais: - Je ne comprend pas l’emploi du mot "parameter", cela ne devrait pas être "variable" ? - même chose pour "expansion", "replace" ou quelque chose comme cela ne serait pas mieux ? 2) "If parameter is unset or null, the expansion of word is assigned to parameter. The value of parameter is then substituted." traduit en français donne pour moi (après avoir fait des tests):> Si la variable n'existe pas ou n'a pas de valeur renseignée, celle-ci est créé avec `word` en valeur. Sinon ... on garde la valeur de la variable précédemment affectée. ``` # echo ${qsd-unmot} unmot # tata=unevaleur # echo ${qsd-unmot} unevaleur # vartest= # : ${vartest:=DEFAULT} # echo $vartest DEFAULT # vartest=uneautrevaleur # : ${vartest:=DEFAULT} # echo $vartest uneautrevaleur ``` Je vois pas de différence. 3) à quoi sert le premier `:` dans ` : ${vartest:=DEFAULT}` ? Et qu'est ce ? C'est vraisemblablement pas une commande bien que avec mon zsh configuré pour que le mot passe en vert si la commande existe (même principe que avec fish); ":" est en vert. Par contre `man :` ou `: -h --help` ne fonctionne pas :) --- Pour donner un contexte à cette interrogation, j'étais en train de fouiner les fichierspoints (aka dotfiles) présent sur l'Internet dans le but de mettre à jours les miens. Or je suis "tombé" sur les deux syntaxes suivantes dans des fichiers .profile .bash_profile .zsh_profile et je ne comprends pas qu'elles sont les différences. export XDG_CONFIG_HOME="${XDG_CONFIG_HOME:-$HOME/.config}" export XDG_CONFIG_HOME=${XDG_CONFIG_HOME:="$HOME/.config"} Et c'est aussi la valse des " ! et pour certain la partie de cache cache des export. Vu qu'il s'agit de variable d'environnement je mettrais export et je serais plutôt d'avis d'utiliser "${}" bien que pour le coups je vois pas trop ce que ça change.

AltStyle によって変換されたページ (->オリジナル) /