1

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

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

-l file1
dirA

-c
-lc file2
file2

-cd file3
file4

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

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

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

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

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

# 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循环中被跳过。

4

1 回答 1

1

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

#! /bin/bash
switches=('-n a'
    '-e "b\nc"'
    ''
    x)
for s in "${switches[@]}" ; do
    echo $s
done
于 2012-05-18T00:33:30.083 回答