基本 bash 打印问题

基本 bash 打印问题

我知道这个问题是关于如何编写脚本的基本知识,但我还没有学到:

我有一个程序,它接受一个列表作为输入,例如: 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

这只在 Bash 中可以正常工作:

array=( str_{1..1000} )
joined_array="$(printf '%s,' "${array[@]}")"
echo "${joined_array%,}"

最后echo一行是省略结尾的逗号。

命令的第一行来自盖尔哈回答

答案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_1000sed 's/ /,/g'用逗号替换所有空格。

相关内容