声明不是有效的标识符bash
发布时间:2020-12-15 21:48:53 所属栏目:安全 来源:网络整理
导读:我的bash脚本有问题.我做的是分配这样的变量. for ((i=START;i=END;i++)declare var$i=$(something)done 它有效,但现在我遇到了?,?,?等芬兰字符的问题.宣称的是这样的 bash:declare 'w?rd' not a valid identifier 虽然我这样做但效果很好 declare var2=$(s?
我的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 与芬兰人物. 解决方法
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 它传递了两个名称,用于声明创建,word3(获取值)和w?rd(这是一个无效的名称).声明word3 =“w?rd”可以正常工作; shell的分词已经在声明获取参数时完成. 然后,您需要引用命令替换(或整个字符串),以便将整个输出视为新变量的值. $i=3 $declare "word$i=$(foo)" $echo "$word3" something w?rd (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |