bash - 引用 shell 变量的打印

标签 bash shell variables printing escaping

我想以这种方式打印变量的内容,打印输出可以直接粘贴到 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/

相关文章:

java向shell脚本返回特定值

excel - Python - XlsxWriter : Referring to columns by column name, 不是列字母(硬编码与动态变量)

jquery - 访问 jQuery 子函数

perl - "$<"& "$>"在 Perl 中是什么意思

shell - sh:如何避免破坏编号的文件描述符?

python -\b python 不删除字符

bash - 如何使用bash在HDFS中的一行上列出带有元数据的文件?

bash - makefile 给出意外的文件结尾错误

linux - 拉取并列出平面文件数据库中最常见的 ID

linux - 如何修复无法链接/usr/bin/gradle ->/etc/alternatives/gradle :/usr/bin/gradle exists and it is not a symlink