首页 > 解决方案 > 如何获取多行关联数组?

问题描述

我正在尝试获取这样的多行关联数组

declare -p -A MOCK_RETURNS=(
  ['/usr/local/bin/docker']=""
  ['/usr/local/bin/docker history']="IMAGE               CREATED AT                  CREATED BY                                      SIZE                COMMENT
cf0f3ca922e0        -10-18T20:48:51+02:00   /bin/sh -c #(nop)  CMD ['/bin/bash']            0
<missing>           2019-10-18T20:48:51+02:00   /bin/sh -c mkdir -p /run/systemd && echo 'do…   7"
  ) > mockResponse

---- other file
source mockResponse
echo ${MOCK_RETURNS['/usr/local/bin/docker history']}

将换行符保留/usr/local/bin/docker history在 bash 中的 -value 中。可悲的是,它似乎是一条线。

我已经尝试过像

echo "declare -A MOCK_RETURNS=(
  ['/usr/local/bin/docker']=\"\"
  ['/usr/local/bin/docker history']=\"IMAGE               CREATED AT                  CREATED BY                                      SIZE                COMMENT
cf0f3ca922e0        $nextYear-10-18T20:48:51+02:00   /bin/sh -c #(nop)  CMD ['/bin/bash']            0
<missing>           2019-10-18T20:48:51+02:00   /bin/sh -c mkdir -p /run/systemd && echo 'do…   7\"
  )" > mockReturns

---- other file
source mockResponse
echo ${MOCK_RETURNS['/usr/local/bin/docker history']}

一直显示文件中的换行符mockReturns,但是当我获取它时,它们又消失了。

标签: bashshell

解决方案


尝试回显包含以下内容的变量"

echo "${MOCK_RETURNS['/usr/local/bin/docker history']}"

$ declare -p -A MOCK_RETURNS=(
  ['/usr/local/bin/docker']=""
  ['/usr/local/bin/docker history']="IMAGE               CREATED AT                  CREATED BY                                      SIZE                COMMENT
cf0f3ca922e0        -10-18T20:48:51+02:00   /bin/sh -c #(nop)  CMD ['/bin/bash']            0
<missing>           2019-10-18T20:48:51+02:00   /bin/sh -c mkdir -p /run/systemd && echo 'do…   7"
) > mockResponse

$ cat test
#! /bin/bash
source mockResponse
echo "${MOCK_RETURNS['/usr/local/bin/docker history']}"
exit 0

$ ./test 
IMAGE               CREATED AT                  CREATED BY                                      SIZE                COMMENT
cf0f3ca922e0        -10-18T20:48:51+02:00   /bin/sh -c #(nop)  CMD ['/bin/bash']            0
<missing>           2019-10-18T20:48:51+02:00   /bin/sh -c mkdir -p /run/systemd && echo 'do   7

编辑:
对于,如果据我所知declare,一个选项是无用的。-p


推荐阅读