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

bash – 棘手的大括号扩展壳

发布时间:2020-12-15 19:02:33 所属栏目:安全 来源:网络整理
导读:使用POSIX shell时,如下所示 touch {quick,man,strong}ly 扩展到 touch quickly manly strongly 哪个会快速,男子气概,强烈地触摸文件,但是可以动态创建扩展吗?例如,以下说明我想要做什么,但由于扩展顺序不起作用: TEST=quick,strong #possibly output from
使用POSIX shell时,如下所示
touch {quick,man,strong}ly

扩展到

touch quickly manly strongly

哪个会快速,男子气概,强烈地触摸文件,但是可以动态创建扩展吗?例如,以下说明我想要做什么,但由于扩展顺序不起作用:

TEST=quick,strong    #possibly output from a program
echo {$TEST}ly

有没有办法实现这个目标?如果需要,我不介意将自己限制在Bash.我也想避免循环.扩展应该作为任意程序的完整参数给出(即,对于每个文件不能调用一次程序,对于所有文件只能调用一次).我知道xargs,但我希望它能以某种方式从shell中完成.

……使用eval有很多错误.你问的只有eval才有可能,但你可能想要的东西很容易,而不必诉诸bash bug-central.

使用数组!每当您需要在一种数据类型中保留多个项目时,您需要(或应该使用)一个数组.

TEST=(quick man strong)
touch "${TEST[@]/%/ly}"

如果没有引入和隐藏在其他建议中的千个错误和安全问题,那就完全符合您的要求.

它的工作方式是:

>“${foo [@]}”:通过展开正确引用的每个元素来扩展名为foo的数组.不要忘记引号!> ${foo / a / b}:这是一种参数扩展,它用f替换foo扩展中的第一个a.在这种类型的扩展中,您可以使用%来表示扩展值的结尾,类似于正则表达式中的$.>把所有这些放在一起,“${foo [@] /%/ ly}”将扩展foo的每个元素,正确引用它作为一个单独的参数,并用ly替换每个元素的结尾.

(编辑:李大同)

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

    推荐文章
      热点阅读