我想以这种方式打印变量的内容,打印输出可以直接粘贴到 shell 中以获取变量的原始内容。
如果内容不包含任何特殊字符,尤其是没有引号,这是微不足道的。例如
$ x=foo
$ echo x=${x}
x=foo
在上面的示例中,我可以获取输出(x=foo
并将其粘贴到新终端以将 foo
分配给 x
) .
如果变量内容包含空格,事情会变得有点棘手,但仍然很容易:
$ x="foo bar"
$ echo x=\"${x}\"
x="foo bar"
现在麻烦开始了,如果允许变量包含任何字符,例如:
$ x=foo\"bar\'baz
$echo ${x}
foo"bar'baz
$ echo x=\"${x}\"
x="foo"bar'baz"
$ x="foo"bar'baz"
>
(而且终端挂了,等我关闭不平衡的”
)
我所期望的是如下所示的输出:
x=foo\"bar\'baz
我该怎么做,最好是符合 POSIX 标准(但如果无济于事,只能使用 bash)?
最佳答案
使用声明-p
:
x=foo\"bar\'baz
declare -p x
declare -- x="foo\"bar'baz"
即使是数组:
arr=(a 'foo' 'foo bar' 123)
declare -p arr
declare -a arr='([0]="a" [1]="foo" [2]="foo bar" [3]="123")'
-p
选项会显示每个变量名的属性和值,可以用来直接再次设置变量。
根据评论,在没有 declare -p
帮助的情况下在 POSIX 中执行此操作将是:
set | grep '^x='
关于bash - 引用 shell 变量的打印,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49979722/