我知道这个问题是关于如何编写脚本的基本知识,但我还没有学到:
我有一个程序,它接受一个列表作为输入,例如:
str_1,str_2, etc
。字符串始终相同,但数字从 1 到 1,000。显然,不可能手动编写它,所以我想str_1,str_2, etc
自动生成参数,然后将其复制到 shell(或者,如果有更好的方法,请告诉我)。
我如何生成此列表?
答案1
#!/usr/bin/python3
import os
def create_list(string_input):
number = 0
string_list = []
while number <= 1000:
number = number+1
string_list.append(string_input+str(number))
return(string_list)
command_list = create_list(string_input = "test")
for item in command_list:
os.system("firefox -new-tab "+item)
这将运行 Firefox 1000 次,以“test1,test2”作为 url 打开新标签(不要尝试:))
将“string_input”更改为您的字符串,将“firefox -new-tab”更改为您的应用程序。
编辑:我肯定是心情不好,当然用 python 也可以写得更短:
#!/usr/bin/python3
import subprocess
command_list = [
"firefox -new-tab "+"test"+str(number) for number in range(0,1001)
]
for command in command_list:
subprocess.call(command)
答案2
# array=( str_1 str_2 str_3 ... str_1000 )
array=( str_{1..1000} )
# prints the content of the array as a single string with comma between elements.
# str_1,str_2,str_3,...,str_1000
( IFS=,; printf '%s\n' "${array[*]}"; )
看http://mywiki.wooledge.org/BashFAQ/005有关在 bash 中使用数组的更多信息。
答案3
答案4
一如既往,有很多解决方案。
就我个人而言,对于这样简单的事情,我既不会编写整个 Python 脚本,也不会在 bash 中声明数组或更改内部字段分隔符。
相反,我只需在命令行中用一行写下这样的内容:
for i in {1..1000}; do printf str_$i,; done
这将输出一个字符串str_1,str_2,...,str_1000,
。根据您所需的自动化级别,如果您想删除尾随,,
那么估计有无数种可能性之一是使用sed
:
for i in {1..1000}; do printf str_$i,; done | sed 's/,$//;'
给你str_1,str_2,...,str_1000
。
更新:
我突然想到,既然你只想打印,你甚至可以不使用显式循环。简短明了:
echo str_{1..1000} | sed 's/ /,/g'
后一个命令也为您提供str_1,str_2,...,str_1000
。
解释:echo str_{1..1000}
输出str_1 str_2 ... str_1000
。sed 's/ /,/g'
用逗号替换所有空格。