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 ,
这是不正确的。好像我正在创建一个新字符串,但我想使用现有字符串。 谷歌不再知道任何关键词:(
答案 0 :(得分:0)
这些都使用数组语法:
echo ${language[*]} , ${language[0]} , ${language[1]}
但是你创建变量的方式,这不是一个数组,这是一个简单的变量:
language=$(locale | grep LANG= | cut -d'"' -f2 | cut -d_ -f1)
要访问其值,只需使用$language
,例如:
echo $language
此外,locale
,grep
和cut
的管道以非常低效的方式获取LANG
变量的前两个字符。
您可以使用子字符串更有效地获得它:
language=${LANG:0:2}
如果你想使用一个数组(虽然我没有看到这里的要点),那么你必须在要分配的值周围加上括号,例如:
language=(${LANG:0:2})
此示例中的此数组有一个元素,您可以像这样访问它的值:
echo ${language[0]}
请注意,Bash的语法对于符号和空格非常严格,每个细节都可能有很大的不同,因此准确编写它很重要。
您可以将脚本粘贴到shellcheck.net以检查是否存在琐碎错误。
您可以在man bash
中了解有关数组的更多信息。