读取带有空格的'for'循环中的完整行,带有多个输入文件的标签

时间:2016-03-03 14:26:04

标签: linux bash command sh

我看过“ 循环的 '文章。它分裂了空格,制表符或换行符等空格的出现。为了解决这个问题,我遵循了额外的命令:

IFS=$'\n'

但是当我尝试在以下细节上解决上述情况时(我有两个文件: 'input1.txt' '输入。我当前目录中的txt'

BASH命令:

bash script.sh 'input*'

以下是script.sh中 'for 循环块

for line in $(cat $1)
...
...
done;

执行时出现以下错误:

cat: input1.txt input.txt*: No such file or directory

注意:我想 cat 两个文件 input1.txt 输入.TXT

1 个答案:

答案 0 :(得分:2)

通过重置$IFS,您可以禁用分词,这会导致$1中的模式扩展被视为单独的文件名。这是以正确方式执行此操作的另一个原因。但首先,让我们说你真的想要将一个模式传递给你的脚本,而不是仅仅使用bash script.sh input*让shell将模式扩展为脚本的文件列表。然后你的循环应该像

cat $1 | while IFS= read -r line; do
    ...
done

然而,如果任何匹配文件本身的名称中都有空格,那么这项工作就不会起作用;使用input a.txtinput b.txt$1将扩展为 4 inputa.txtinput和{ {1}}。相反,您应该让shell执行扩展并将每个匹配的文件作为单独的参数传递:

b.txt

并在您的脚本中:

bash script.sh input*