加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

声明不是有效的标识符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

与芬兰人物.
w?rd这个词是我命令’something’输出的一部分.当有两个或更多单词时,只有包含字符?,?等的单词不会分配给变量,所以如果命令的输出是“某些东西”,则唯一显示的是有回声是一回事.

解决方法

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读