我看过“ 循环的 '文章。它分裂了空格,制表符或换行符等空格的出现。为了解决这个问题,我遵循了额外的命令:
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
答案 0 :(得分:2)
通过重置$IFS
,您可以禁用分词,这会导致$1
中的模式扩展被视为单独的文件名。这是以正确方式执行此操作的另一个原因。但首先,让我们说你真的想要将一个模式传递给你的脚本,而不是仅仅使用bash script.sh input*
让shell将模式扩展为脚本的文件列表。然后你的循环应该像
cat $1 | while IFS= read -r line; do
...
done
然而,如果任何匹配文件本身的名称中都有空格,那么这项工作就不会起作用;使用input a.txt
和input b.txt
,$1
将扩展为 4 字input
,a.txt
,input
和{ {1}}。相反,您应该让shell执行扩展并将每个匹配的文件作为单独的参数传递:
b.txt
并在您的脚本中:
bash script.sh input*