将空行从文件作为参数传递给bash脚本

时间:2012-05-18 00:14:37

标签: bash shell

如何将文件中的空行作为参数传递给另一个脚本中的bash脚本?

以下是详细信息。脚本栏从inputfile读取行,将它们存储在数组中,并将数组元素作为选项和/或参数传递给脚本foo。 inputfile看起来像这样:

-l file1
dirA

-c
-lc file2
file2

-cd file3
file4

(等)这是发生的事情。脚本栏逐行读取文件并正确创建数组,包括空行的两个空元素。 (我通过回显每个数组元素来检查它。)但是当bar在循环中遍历数组并将每个元素传递给脚本foo时,将跳过两个空元素。因此,应该使用零参数和零选项调用脚本foo的情况不会发生。脚本foo的所有其他运行按预期运行。

我想也许问题是因为输入文件除了换行符之外什么都没有,也许数组中的那些元素只是null而不是包含空字符串。所以我尝试在输入文件“空白”行中放置空格,看看它是否会有任何区别,但结果是一样的。

当输入文件有空行时,或者至少只有空白字符的行时,我需要做什么才能正确调用foo而不带参数和没有选项?

我希望问题很清楚。谢谢你的帮助!

EDIT。有人建议我发布脚本,所以这里是相关部分:

# read in input lines from file, add to array
index=0
while read line 
do
tests[index]=$line
(( index++ ))
done < $@

# run tests
for stuff in ${tests[@]}
do  
foo ${stuff} > /dev/null 2>&1
    # capture and process the exit status of each foo run
done

我知道这看起来好像没有设置IFS。那是因为这只是我脚本的一部分。我很确定这个问题在某处;数组确实使用带有空行的两个元素正确构建,但这些元素在for ... in循环中被跳过。

1 个答案:

答案 0 :(得分:1)

如果您在需要的地方添加双引号,它应该可以使用。 (我只是猜测,因为你没有展示你如何迭代这些行。)

#! /bin/bash
switches=('-n a'
    '-e "b\nc"'
    ''
    x)
for s in "${switches[@]}" ; do
    echo $s
done