2014-10-09 47 views
1

只是瞎搞与bash,我想出了

declare -a K <<< "${SHELL}"; declare -p $K 

declare -p是用来检查数组已创建或不是一个短期的命令,通常它吐出来了给定的数组声明如果一切顺利如预期的那样,如果给定的变量实际上是一个数组。

<<<东西的内容重定向到标准输入,这样您就可以使用变量的内容,就好像它来自标准输入。

declare -a声明一个数组,一个正常一个不是关联的,键只是数字。

那么为什么这个命令打印出的数据块甚至看起来不像declare -p的通常输出,它根本不像数组。这只是一系列declare <something> <something>

有人可以解释这个命令的行为吗?

+0

@CharlesDuffy你确定'declare'不从'<<<''读取,如果我记得正确,我记得某些脚本沿着'declare -t <<< varWithMultiLineData'的行来快速创建一些脚本从一个变量的内容中吃了一个数组。 – user2485710 2014-10-09 20:25:08

+1

是的,很确定。在bash 4.0或更高版本中,'readarray'或'mapfile'可以做到这一点; '声明'不。 – 2014-10-09 20:25:33

+0

@CharlesDuffy我想我只是混淆了2,它可能是'mapfile',因为'readarray'显然只是'mapfile'本身的别名。但是我仍然不知道这个命令是怎么回事。 – user2485710 2014-10-09 20:29:17

回答

2

使用它正确的方法是:

declare -a K=("${SHELL}") 

declare -p K 
declare -a K='([0]="/bin/bash")' 

因此,使用declare -p K代替declare -p $K

help declare

-p display the attributes and value of each NAME 
+0

甚至意味着'每个NAME'的属性和值?这个“属性和值”与所涉及的“NAME”有什么联系? – user2485710 2014-10-09 20:26:58

+1

@ user2485710,'-a' - 是一个数组 - 是一个属性。如果您已将任何内容分配给数组,则它们将是值。 – 2014-10-09 20:28:00

+0

最后一行是'help declare'中'-p'行的复制/粘贴。简单的说'declare -p'为你提供了一个文本,你可以在你的脚本中直接使用它来声明。 – anubhava 2014-10-09 20:29:57

相关问题