当使用 POSIX shell 时,以下内容
touch {quick,man,strong}ly
扩展到
touch quickly manly strongly
哪个会触及文件quickly
, manly
, and strongly
,但是可以动态创建扩展吗?例如,以下说明了我想要执行的操作,但由于扩展顺序而不起作用:
TEST=quick,man,strong #possibly output from a program
echo {$TEST}ly
有什么办法可以实现这一点吗?如果需要的话,我不介意将自己限制在 Bash 上。我还想避免循环。扩展应该作为任意程序的完整参数给出(即该程序不能为每个文件调用一次,只能为所有文件调用一次)。我知道关于xargs
但我希望这一切都能以某种方式从 shell 完成。
...使用起来有很多错误eval
。你所问的只有可能eval
, BUT你可能会做什么want无需求助于 bash bug-central 即可轻松实现。
使用数组!每当你需要保留multiple中的项目one数据类型,您需要(或者,should使用)一个数组。
TEST=(quick man strong)
touch "${TEST[@]/%/ly}"
这正是您想要的,没有此处其他建议中引入和隐藏的数千个错误和安全问题。
它的工作方式是:
-
"${foo[@]}"
:扩展名为的数组foo
通过扩展其每个元素并正确引用。不要忘记引号!
-
${foo/a/b}
:这是一种参数扩展,取代了第一种a
in foo
的展开式为b
。在这种类型的扩展中,您可以使用%
表示扩展值结束,有点像$
在正则表达式中。
- 将所有这些放在一起,“${foo[@]/%/ly}”将展开每个元素
foo
,将其正确引用为单独的参数,并将每个元素的结尾替换为ly
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)