【发布时间】:2021-07-07 16:03:57
【问题描述】:
偶尔,但不足以需要为其编写脚本,我可能需要针对一组参数运行“foo”。它可能会改变哪个参数是静态的,哪个是列表,它可能会改变列表的长度。
为了说明我想要做什么,请考虑
rm ./$(ls -lrt foo | awk '{print $9}')
作为我试图实现的相同功能的演示(当然除了这个语法 rm 是交互式的,有问题的脚本不会是,但是rm 对给它的一组参数执行操作)而不是,例如
foo 1 2a 3; foo 1 2b 3; foo 1 2c 3
是否有一些来自终端的语法(该系统可以访问 ksh88 或 bash),例如,我可以
foo 1 $(2a,2b,2c) 3
或类似的,这样我就可以输入一次脚本和常量参数并仅自动化当前需要的部分?所需的 args 可能是也可能不是顺序的,或者是使用 for 循环有意义的模式。所以我会列出,无论是 csv 还是其他某种方式,每个都明确地无法通过任何其他命令的输出提供它。
我确信任何 shell 都能够做我想做的事情我只是没有办法测试在生产之外可能工作的东西。
提前致谢。
edit: to 2a-2c 可能没有准确地说明,arg 可能是 (apple,banana,orange) 即它们不一定是 2(a..c) 这么简单的术语。
【问题讨论】:
-
echo 1 2{a,b,c} 3=>1 2a 2b 2c 3,所以也许试试foo 1 2{a,b,c} 3?如果这不能解决您的问题,那么我们将需要更多详细信息和/或示例 -
当然这并不能回答您的问题,但请注意,
rm ./$(ls -lrt foo | awk '{print $9}')是一个相当严重的反模式——文件名带有空格时会严重失败,不能保证在整个文件名中都能正常工作一系列符合 POSIX 的ls实现等。另请参阅Why you shouldn't parse the output ofls -
太棒了
for i in a b c; do foo 1 2$i 3; done? -
@CharlesDuffy 谢谢你提供的信息。我只是将它用于说明目的,因为它的工作原理促使我考虑我可以在输入数据方面变得多么聪明,而不必为不常见或一次性的情况制作尽可能多的脚本和函数。