BASH grep结果为数组名称

时间:2017-01-31 22:58:48

标签: arrays string bash macos grep

Heyhey, 因为这是我的第一篇文章,请耐心等待:)我尽我所能。

我尝试从我的系统(osx)中“grep”语言,并将其作为字符串名称来设置语言。

我在某处有一些名为$en['a' 'b' 'c']$de['d' 'e' 'f']$fr['g' 'h' 'i']的字符串......

我用:

language=$(locale | grep LANG= | cut -d'"' -f2 | cut -d_ -f1)

给我一​​个ISO值,如en,fr,de,...

这是我的主要问题。我不能只使用${language[*]}。 感觉就像我尝试了一切。已经在{} () ''$上尝试了错误。

我在调试language时发现的唯一结果是

language=ISO(所以这是正确的)

如果我尝试将此值作为我想要的字符串

echo ${language[*]} , ${language[0]} , ${language[1]}

结果

 ISO , ISO ,

这是不正确的。好像我正在创建一个新字符串,但我想使用现有字符串。 谷歌不再知道任何关键词:(

1 个答案:

答案 0 :(得分:0)

这些都使用数组语法:

echo ${language[*]} , ${language[0]} , ${language[1]}

但是你创建变量的方式,这不是一个数组,这是一个简单的变量:

language=$(locale | grep LANG= | cut -d'"' -f2 | cut -d_ -f1)

要访问其值,只需使用$language,例如:

echo $language

此外,localegrepcut的管道以非常低效的方式获取LANG变量的前两个字符。 您可以使用子字符串更有效地获得它:

language=${LANG:0:2}

如果你想使用一个数组(虽然我没有看到这里的要点),那么你必须在要分配的值周围加上括号,例如:

language=(${LANG:0:2})

此示例中的此数组有一个元素,您可以像这样访问它的值:

echo ${language[0]}

请注意,Bash的语法对于符号和空格非常严格,每个细节都可能有很大的不同,因此准确编写它很重要。

您可以将脚本粘贴到shellcheck.net以检查是否存在琐碎错误。

您可以在man bash中了解有关数组的更多信息。