我看过以下文章'for'环形。它会在出现空格、制表符或换行符等空白时进行分割。为了解决这个问题,我有以下额外的命令:
IFS=$'\n'
但是当我尝试根据以下细节解决上述场景时(我有两个文件:'输入1.txt' and '输入.txt'在我当前的目录中):
bash命令:
bash script.sh 'input*'
下边是'for'script.sh 中的循环块
for line in $(cat $1)
...
...
done;
我在执行时遇到以下错误:
cat: input1.txt input.txt*: No such file or directory
Note:我想要cat两个文件输入1.txt and 输入.txt
通过重置$IFS
,您禁用会导致模式扩展的分词$1
被视为单独的文件名。这是这样做的另一个原因right方式。但首先,假设您确实想将模式传递给脚本,而不仅仅是使用bash script.sh input*
让 shell 将模式扩展为脚本的文件列表。那么你的循环应该是这样的
cat $1 | while IFS= read -r line; do
...
done
但是,如果任何匹配文件本身的名称中包含空格,则此方法将不起作用;和input a.txt
and input b.txt
, $1
将扩展到4 words input
, a.txt
, input
, and b.txt
。相反,您实际上应该让 shell 进行扩展并将每个匹配文件作为单独的参数传递:
bash script.sh input*
在你的脚本中:
for f in "$@"; do
while IFS= read -r line; do
...
done < "$f"
done
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)