如何在bash中一次一行地将变量传递给脚本?

时间:2015-04-14 09:02:38

标签: linux bash variables

我有一个文件和标题列表,如下所示:

Title    file1.txt
Title2   file2.txt
Title3   file3.txt

如何逐行将此传递给脚本,将第1列和第2列设置为单独的变量。 e.g。

将标题发送为$ 1,将file1.txt作为$ 2发送到我的脚本。 然后将Title2作为$ 1发送,将file2.txt作为$ 2发送到同一个脚本。

我不知道是否有更简单的方法可以做到这一点,但感谢任何帮助,谢谢。

3 个答案:

答案 0 :(得分:0)

尝试:

for i in "Title file1.txt" "Title2 file2.txt" "Title3 file3.txt"; do Title $i; done

这实际上就像在做:

$ for i in "a b" "c d" "e f"; do echo $i; done
a b
c d
e f

答案 1 :(得分:0)

您可以尝试制作运行目标脚本的其他脚本:

#! /bin/bash 

ls /path/where/files/stay >> try.txt

a=1
while [ $a -lt 7 ]
    do
        ./script $(sed "$a"'q;d' try.txt) $(sed "$(($a+1))q;d" try.txt)
        a=$(($a+2))
    done

此脚本将运行您的脚本,从文件中获取您喜欢的变量。

答案 2 :(得分:0)

只需逐行读取文件,使用参数扩展来提取标题和文件名。

while read -r title file ; do
    echo Title is "$title", file is "$file".
done < input.lst

如果标题可以包含空格,则会更复杂:

while read -r line ; do
    title=${line% *}     # Remove everything from the first space.
    title=${title%%+( )} # Remove trailing spaces.
    file=${line##* }     # Remove everything up to the last space.
    echo Title is "$title", file is "$file".
done < input.lst