0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

zshで変数をダンプ表示する(RubyのpやPHPのvar_dumpみたいなもの)

Last updated at Posted at 2023-06-24

typesetがお手軽。
declaretypesetのエイリアスなのでdeclareでも可。
ただし、typeset -hまたはtypeset -Hで宣言されている変数は値が表示されない(これらを表示)。

文字列

$ s='hello world'

$ typeset s
s='hello world'

配列

$ a=(hoge moge sage)

$ typeset a
a=( hoge moge sage )

$ typeset -p a
typeset -a a=( hoge moge sage )

# -p 1をつけると要素ごとに改行する
$ typeset -p 1 a
typeset -a a=(
  hoge
  moge
  sage
)

# -pをつけると、-Hで宣言された変数は値が表示されない
$ typeset -aH a=(1 2)
$ typeset -p a
typeset -a a

連想配列

$ typeset -A aa=(a 1 b 2 c 3)

$ typeset aa
aa=( [a]=1 [b]=2 [c]=3 )

$ typeset -p aa
typeset -A aa=( [a]=1 [b]=2 [c]=3 )

# -p 1をつけると要素ごとに改行する
$ typeset -p 1 aa
typeset -A aa=(
  [a]=1
  [b]=2
  [c]=3
)

定義されていない変数

$ typeset lajsd
(出力なし)

$ typeset -p lajsd
typeset: no such variable: lajsd

全変数を表示するには

$ set

-Hつきの変数の値も表示するには

以下の関数を定義する。

tp() {
  emulate -LR zsh
  local variable_name="$1"
  local type="${(tP)variable_name}"
  local i

  print -r -- "$type"

  if [[ "$type" == *array* ]]; then
    for i in ${(P)variable_name}; do
      print -r -- "${(q)i}"
    done
  elif [[ "$type" == *association* ]]; then
    for i in ${(kP)variable_name}; do
      print -r -- "${(q)i} ${(q)${(P)variable_name}[$i]}"
    done
  else
    print -r -- "${(qP)variable_name}"
  fi
}

emulate -R zsh
typeset -H str='hoge moge'
typeset -Ha arr=('hoge moge' 'sage peso')
typeset -HA assoc=('hoge moge' 1 'sage peso' 2)

tp str
# =>
# scalar-hideval
# hoge\ moge

tp arr
# =>
# array-hideval
# hoge\ moge
# sage\ peso

tp assoc
# =>
# association-hideval
# sage\ peso 2
# hoge\ moge 1

変数展開フラグ (P)は展開結果をさらに変数名として展開を行う。
(t)は変数の型に展開する。
(q)はクォートする。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?