bash readline で、変数 (つまり、先頭に「$」が付いた名前) をその値の内容に展開するにはどうすればよいですか?
答え1
特に readline について言及されているので、次のようなことを望んでいると思います:
$ echo $foo
次のように変わります:
$ echo bar
ここでbar
の値は です$foo
。
があるこのreadline拡張:
shell-expand-line (M-C-e)
シェルと同じように行を展開します。これにより、エイリアスと履歴の展開、およびすべてのシェルの単語展開が実行されます(シェル拡張)。
M-C-e
Esc 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
。