Bash 循环交叉污染的嵌套模型

Bash 循环交叉污染的嵌套模型,bash,for-loop,Bash,For Loop,我想将一大组CSV组合成多个100万行文件,不知何故,CSV的文件名正在大组中污染我的输出。我没有地方回显$file变量,所以我不明白它们为什么会出现在我的输出中 我正在使用的数据已签入 这不是一个真正重要的问题,但它让我抓狂。其中一些CSV文件中的数据看起来像是外壳上的球体。由于脚本以不带引号的方式执行echo$data,因此您将看到整个目录的内容在输出中展开为glob。您可以通过使用更多引号来解决此问题: echo "$data" >> batch${batchnum}.csv

我想将一大组CSV组合成多个100万行文件,不知何故,CSV的文件名正在大组中污染我的输出。我没有地方回显$file变量,所以我不明白它们为什么会出现在我的输出中

我正在使用的数据已签入


这不是一个真正重要的问题,但它让我抓狂。

其中一些CSV文件中的数据看起来像是外壳上的球体。由于脚本以不带引号的方式执行echo$data,因此您将看到整个目录的内容在输出中展开为glob。您可以通过使用更多引号来解决此问题:

echo "$data" >> batch${batchnum}.csv
这也会导致bash不重击空格。或者您可以禁用全局扩展:

set -f
echo $data >> batch${batchnum}.csv

在上面的脚本中有几个。他们中的一个可能有错,尽管我不能简单地指出他们中的任何一个是你抱怨的直接原因。但在我看来,整个脚本可以在一行中重写:
cat*.csv | split-l 1000000-
谢谢,这是一个更优雅的解决方案。
$[ctr+1]
符号很奇怪。它看起来像是
$((ctr+1))
@JonathanLeffler上的一个变体,我是第一次发现它的。在那篇帖子上有关于该表单被弃用的讨论。
set -f
echo $data >> batch${batchnum}.csv