如何将文件中的空行作为参数传递给另一个脚本中的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
循环中被跳过。
答案 0 :(得分:1)
如果您在需要的地方添加双引号,它应该可以使用。 (我只是猜测,因为你没有展示你如何迭代这些行。)
#! /bin/bash
switches=('-n a'
'-e "b\nc"'
''
x)
for s in "${switches[@]}" ; do
echo $s
done