¿Cómo expandimos una variable, es decir? ¿Un nombre precedido por '$', a su contenido de valor en bash readline?
Respuesta1
Ya que mencionas específicamente readline, creo que quieres algo para que esto:
$ echo $foo
se convierte en:
$ echo bar
¿Dónde bar
está el valor de $foo
?
Hayesta expansión de línea de lectura:
shell-expand-line (M-C-e)
Expande la línea como lo hace el caparazón. Esto realiza la expansión de alias e historial, así como todas las expansiones de palabras del shell (consulteExpansiones de caparazón).
M-C-e
normalmente sería Esc Ctrl+ eo Alt+ Ctrl+ e.
Sin embargo, esto también expande todo lo demás, como sustituciones de comandos, expansión aritmética, etc. Entonces esto:
$ echo $SHELL $(date) $((11+22))
se convierte en:
$ echo /bin/zsh Wed 3 Nov 00:52:09 JST 2021 33
Respuesta2
No sé si entendí correctamente tu pregunta pero puedes imprimir una variable usandoeco.
Respuesta3
Prueba esto:
#!/bin/bash
DEFAULT_VALUE="default-value"
read -e -p $'\e[33mEnter variable name\e[0m: ' -i "$DEFAULT_VALUE" NEW_VAR
echo "New value for variable is: $NEW_VAR"
Respuesta4
No conozco ninguna forma de expandir una variable durante read
, pero puedes evaluarla después sin cambiar el resultado si el archivo almacenado no se refiere a un nombre de variable:
read -e variable
$SHELL
echo $valiable
$SHELL
eval echo $variable
/bin/bash
echo $variable | envsubst
/bin/bash
read -e n
hello
echo $n
hello
eval echo $n
hello
echo $n | envsubst
hello
Tenga en cuenta los peligros eval
que puede tener, ya que también ejecuta cualquier comando almacenado como variable. Por razones de seguridad, recomiendo encarecidamente seguir con envsubst
.