【问题标题】:BASH grep result as array nameBASH grep 结果作为数组名称
【发布时间】:2017-06-17 13:36:39
【问题描述】:

嘿嘿, 由于这是我的第一篇文章,请耐心等待:) 我尽力了。

我尝试从我的系统 (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 ,

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

【问题讨论】:

  • 输入到底是什么?你期望什么输出?
  • 我刚刚填写了一些输入。我希望 ${en[@]} 和 ${language[@]} 的输出是相同的。

标签: arrays string bash macos grep


【解决方案1】:

这些都使用数组语法:

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 中阅读有关数组的更多信息。

【讨论】:

  • 如果数组中有字符串,我应该使用数组语法吗?你说得对,这确实更有效,谢谢。仍然无法通过 $language[ ] 访问我的数组
  • 它将是一个数组或一个字符串(你明白,对吗?)。如果您真的想要一个数组,请执行 language=( $(local ..... | ....) ) 。祝你好运。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-04
  • 2023-03-27
  • 1970-01-01
  • 1970-01-01
  • 2020-05-19
  • 1970-01-01
相关资源
最近更新 更多