コンソール/シェルプロンプトで変数を展開する方法

コンソール/シェルプロンプトで変数を展開する方法

bash readline で、変数 (つまり、先頭に「$」が付いた名前) をその値の内容に展開するにはどうすればよいですか?

答え1

特に readline について言及されているので、次のようなことを望んでいると思います:

$ echo $foo

次のように変わります:

$ echo bar

ここでbarの値は です$foo

があるこのreadline拡張:

shell-expand-line (M-C-e)
シェルと同じように行を展開します。これにより、エイリアスと履歴の展開、およびすべてのシェルの単語展開が実行されます(シェル拡張)。

M-C-eEsc Ctrl通常は+eまたはAlt+ Ctrl+になりますe

ただし、これにより、コマンドの置換、算術展開など、他のすべても展開されます。つまり、次のようになります。

$ echo $SHELL $(date) $((11+22))

次のように変わります:

$ echo /bin/zsh Wed 3 Nov 00:52:09 JST 2021 33

答え2

質問を正しく理解できたか分かりませんが、変数を印刷するには次のようにします。エコー

答え3

これを試して:

#!/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"

答え4

実行中に変数を展開する方法はわかりませんがread、保存された文字列が変数名を参照していない場合は、結果を変更せずに後で評価することができます。

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

eval変数として保存されているコマンドも実行されるため、危険性に注意してください。セキュリティ上の理由から、 に固執することを強くお勧めしますenvsubst

関連情報