変数名とその値を表示する関数の作成

変数名とその値を表示する関数の作成

変数名を入力として使用する関数を作成したいと思います(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(配列bashyashサポートする4つのBourne様シェル)。typeset -p var変数定義と属性の印刷も参照してください。

おすすめ記事