Cómo expandir una variable en el indicador de consola/shell

Cómo expandir una variable en el indicador de consola/shell

¿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 barestá 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-enormalmente 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 evalque puede tener, ya que también ejecuta cualquier comando almacenado como variable. Por razones de seguridad, recomiendo encarecidamente seguir con envsubst.

información relacionada