コピー/貼り付けを可能にするためにシェル変数と値を印刷するにはどうすればよいですか?

コピー/貼り付けを可能にするためにシェル変数と値を印刷するにはどうすればよいですか?

Bash 4.2.25ではset出力envはエスケープされていないため、シェルエスケープと印刷できない文字はコピーして貼り付けることはできません。次のシェルセッションを例に挙げます。

$ export foo=$'a\nbar=\baz'
$ env | grep -A 1 foo
foo=a
baraz

たとえば、色も同じです。文字通り印刷され、端末を台無しにすることができます。出力をコピーして貼り付けて同じ環境を提供できるように、すべての変数とその値を印刷するにはどうすればよいですか?*

$_*読み取り専用変数、特殊変数などに関する標準的な警告が明らかにあります。

ベストアンサー1

次のことができます。

printvars() (
  eval 'declare() { printf declare; printf " %q" "$@"; echo; }'"
        $(declare -p)"
)

printvars

読み取り専用変数を省略するように簡単に拡張できます。たとえば、次のようになります。

printvars() (
  eval 'declare() {
          [[ $1 = *r* ]] && return
          printf declare; printf " %q" "$@"; echo
        }'"
        $(declare -p)"
)

おすすめ記事