我有一个命令,其形式为
#!/bin/bash
command -f hello.txt -f world.txt -f bonjour.txt
hello.txt
,world.txt
和bonjour.txt
是目录中的文件/directory
。
由于实际上有 50 或 60 个这样的文件(并且它们会发生变化),我想-f
在command
.
-f
如果命令是(只有一个),这将很容易
command -f hello.txt world.txt bonjour.txt
因为我会去
command -f $(ls /directory)
有没有一种简单的方法来加入-f
和元素ls /directory
?
我正在寻找 Python 的等价物
"-f " + " -f ".join(['hello.txt', 'world.txt', 'bonjour.txt'])
['hello.txt', 'world.txt', 'bonjour.txt']
生成的列表在哪里。
使用
for
循环构建变量。因为您使用的是 Bash,所以您应该使用数组变量,因为命令行参数实际上是一个数组,而不是单个平面字符串。这将避免各种与引用相关的问题:
出于同样的原因,避免
$(ls)
使用内置通配符,即*
.如果您正在为基线 POSIX shell 而不是专门为 Bash 编写,您需要使用字符串变量,但您仍然可以使用
*
来获取文件名,以及for
将它们连接在一起:有更紧凑的编写方式,但它们既不易于阅读,也不明显更快。
我会像这样使用 printf 的自动扩展:
command $( printf -- '-f %q ' *.txt )
这将导致这样的命令,具体取决于您目录中的任何 .txt 文件:
command -f hello.txt -f world.txt -f bonjour.txt