拆分和连接(从输入文件创建命令行参数)

wik*_*sky 2 linux shell-script split

如何从格式的行文件中连接文本:

line1
line2
...
Run Code Online (Sandbox Code Playgroud)

得到这样的结果

-o line1:1 -o line2:1 ...
Run Code Online (Sandbox Code Playgroud)

我找到了如何连接这样的分隔符的解决方案:

ds=`cat list.txt`
${ds//$'\n'/','}
Run Code Online (Sandbox Code Playgroud)

但我不知道如何为每个条目添加前缀。

Kus*_*nda 6

这取决于您想对您创建的字符串做什么。它看起来像一组命令行选项,因此我假设您希望将它与一些名为util.

这是一个解决方案/bin/sh

#!/bin/sh

listfile=$1

set --
while IFS= read -r line; do
    set -- "$@" -o "$line:1"
done <$listfile

util "$@"
Run Code Online (Sandbox Code Playgroud)

这从脚本的命令行给出的文件中读取,并用于从该文件中读出每一行,它设置的位置参数,以包括-oLINE:1其中LINE是线从文件中读取。

读取所有行后,它util使用构造的命令行参数列表进行调用。通过使用"$@"(使用双引号),我们确保构造的参数列表中的每个单独项目都被单独引用。

使用bash并使用bash数组来保存我们创建的命令行参数:

#!/bin/bash

listfile=$1

while IFS= read -r line; do
    args+=( -o "$line:1" )
done <$listfile

util "${args[@]}"
Run Code Online (Sandbox Code Playgroud)

在上面的两个例子中,引用很重要。同样的是,我们创建了一个事实的单独项目阵列(每个-o和每一个LINE:1在列表中的项目)。另一种方法是创建单个字符串 -o LINE1:1 -o LINE2:1 etc.,但是如果用作 as 将被解释为单个参数,util "$string"并且如果用作 as将进行分词和文件名通配util $string(如果在输入文件包含空格、制表符或文件名通配符)。

上面的两个脚本都将用作

$ ./script.sh file
Run Code Online (Sandbox Code Playgroud)

哪里script.sh是可执行脚本文件,file是要读取的输入文件名。

有关的: