声明不是有效标识符 bash
declare not a valid identifier 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
使用芬兰语字符。
这个单词是我的命令 'something' 输出的一部分。当有两个或更多单词时,只有包含字符 ö 、 ä 等的单词不会分配给变量,因此如果命令的输出是 "something wörd" 那么唯一被分配的是用 echo 显示的是一些东西。
bash
根本不允许标识符使用 A-Z、a-z、0-9 和 _ 以外的字符。但是,您描述的错误只是该限制的副作用。 declare
是一个接受字符串参数的命令,看起来 像一个赋值语句,但语义略有不同。考虑这个命令:
foo () {
echo "something wörd"
}
在赋值语句中,右侧不进行分词,因此您不必引用命令替换。以下工作正常:
$ word3=$(foo)
$ echo "$word"
something wörd
使用 declare
,然而,命令替换 确实 进行分词,所以当你写
$ i=3
$ declare word$i=$(foo)
相当于命令
$ declare word3=something wörd
传递 两个 名称供 declare
创建,word3
(获取值)和 wörd
(无效姓名)。 declare word3="something wörd"
可以正常工作; shell 的分词在 declare
获取参数时已经完成。
使用 declare
,则需要引用命令替换(或整个字符串),以便将整个输出视为新变量的值。
$ i=3
$ declare "word$i=$(foo)"
$ echo "$word3"
something wörd
如果 sh
(:
则在命令行中使用 /bin/bash
尝试 运行 你的脚本
而不是:
>> sh script.sh
尝试:
>> /bin/bash script.sh
我的 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
使用芬兰语字符。 这个单词是我的命令 'something' 输出的一部分。当有两个或更多单词时,只有包含字符 ö 、 ä 等的单词不会分配给变量,因此如果命令的输出是 "something wörd" 那么唯一被分配的是用 echo 显示的是一些东西。
bash
根本不允许标识符使用 A-Z、a-z、0-9 和 _ 以外的字符。但是,您描述的错误只是该限制的副作用。 declare
是一个接受字符串参数的命令,看起来 像一个赋值语句,但语义略有不同。考虑这个命令:
foo () {
echo "something wörd"
}
在赋值语句中,右侧不进行分词,因此您不必引用命令替换。以下工作正常:
$ word3=$(foo)
$ echo "$word"
something wörd
使用 declare
,然而,命令替换 确实 进行分词,所以当你写
$ i=3
$ declare word$i=$(foo)
相当于命令
$ declare word3=something wörd
传递 两个 名称供 declare
创建,word3
(获取值)和 wörd
(无效姓名)。 declare word3="something wörd"
可以正常工作; shell 的分词在 declare
获取参数时已经完成。
使用 declare
,则需要引用命令替换(或整个字符串),以便将整个输出视为新变量的值。
$ i=3
$ declare "word$i=$(foo)"
$ echo "$word3"
something wörd
如果 sh
(:
/bin/bash
尝试 运行 你的脚本
而不是:
>> sh script.sh
尝试:
>> /bin/bash script.sh