変数名を入力として使用する関数を作成したいと思います(superEchoと呼びます)。関数は変数の名前とその値を印刷する必要があります。
function superEcho
{
echo "$1: ?????"
}
var=100
superEcho var
このスクリプトを返したいです。
var: 100
ちなみにsuperEcho関数で「???」代わりに何を使うべきかわかりません。
ベストアンサー1
POSIX的に:
superEcho() {
eval 'printf "%s\n" "$1: ${'"$1"'}"'
}
bash
-specと同様に、削除されたと${!var}
予想され、有効な変数名が含まれています。$1
そうしないと、ランダムなコマンド注入の脆弱性になります。
関数でクリーンアップを実行できます。
superEcho() {
case $1 in
("" | *[!_0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ]* | [0123456789]*)
printf >&2 'Invalid variable name: "%s"\n' "$1"
return 1;;
(*) eval 'printf "%s\n" "$1: ${'"$1"'}"'
esac
}
型変数の場合大量にまたは連想配列、inbash
またはksh
(POSIXsh
には配列はありませんが、"$@"
関数自体のパラメータなので、ここでは使用できません。superEcho
)インデックス要素の値のみを印刷します0
が、inではzsh
次のように出力されます。価値の最初の文字$IFS
(およびのSPC文字yash
)です。
ksh
、またはzsh
(配列bash
をyash
サポートする4つのBourne様シェル)。typeset -p var
変数定義と属性の印刷も参照してください。