我的bash脚本有问题。我要做的就是分配这样的变量。
for ((i=START;i<=END;i++)
declare var$i=$(something)
done
它可以正常工作,但是现在我遇到了像Å,ä,Ö一样的芬兰角色。声明说的就是这样
bash:declare 'wörd' not a valid identifier
虽然如果我这样做可以正常工作
declare var2=$(sömething)
我可以用SED转换字符,但是最好像往常一样拥有它们,因此这是最后的度假解决方案。因此,我想知道如何分配
之类的变量var$i
带有芬兰角色。wörd单词是我命令"某物"输出的一部分。当只有两个单词或更多单词或多个单词包含字符Ö,ä等的单词不会分配给变量,因此,如果命令的输出是"某物",那么唯一显示的东西与Echo是一种。
bash
根本不允许使用A-Z,A-Z,0-9和_以外的字符的标识符。但是,您描述的错误只是该限制的副作用。 declare
是一个命令,它采用字符串参数,看起来像一个分配语句,但语义略有不同。考虑此命令:
foo () {
echo "something wörd"
}
在作业语句中,右侧不经过单词拆分,因此您不必引用命令替换。以下工作正常:
$ word3=$(foo)
$ echo "$word"
something wörd
使用 declare
,但是,命令替换 di di dip 进行单词分配,所以当您编写
$ i=3
$ declare word$i=$(foo)
它等效于命令
$ declare word3=something wörd
通过 declare
的两个名称创建,word3
(获得值)和wörd
(这是无效的名称)。declare word3="something wörd"
可以正常工作;外壳的单词拆分已经完成了declare
获取参数的时间。
使用declare
,您需要引用命令替换(或整个字符串),以使整个输出被视为新变量的值。
$ i=3
$ declare "word$i=$(foo)"
$ echo "$word3"
something wörd
如果sh
(:
/bin/bash
在命令行中运行脚本而不是:
>> sh script.sh
尝试:
>> /bin/bash script.sh