声明不是有效的标识符bash



我的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 

相关内容

  • 没有找到相关文章

最新更新