CAT 忽略换行符
CAT ignores newline character
我是一名学习者,我刚刚创建了一个新的 bash 脚本,它从命令行读取两个文件名并打印它们的内容。但是,它不起作用。我有两个文件:log1.txt 和 log2.txt,它们都以换行符结尾。我的代码基本上是这样的:
File+=$(cat "$first")
File+=$(cat "$second")
echo "$File"
但是,第一个文件的末尾和第二个文件的开头合并为一行。我该如何解决?我已经用谷歌搜索了几个小时,如果有任何帮助,我将不胜感激。
命令替换 trim命令输出中的任何尾随换行符 运行。这种行为是 POSIX 标准强制要求的——否则就没有任何意义,因为 POSIX 指定 all 上的有效文本行UNIXy 系统必须以换行符结束;所以如果不是这样,人们将需要 trim 不断地尾随换行符。
但是,您没有理由将引入换行符作为 shell 的问题:
cat
代表“连接”;当给定多个文件时,它将它们连接在一起。如果您传递给它的参数不超过一个,通常您一开始就没有充分的理由使用它。
File=$(cat "$first" "$second")
Command substitutions 从里面的复合命令中删除标准输出末尾的所有尾随换行符(甚至多个换行符)。解决这个问题的两种主要方法是
- 确保命令替换以其他终止符结束,然后将其删除或
- 使用命令替换以外的东西。
第一个的简单实现是这个模式:
name="$(some_command; echo x)"
name="${name%x}"
避免命令替换的最简单方法是将每个文件连接成一个单独的文件:
cleanup() {
if [[ -d "$work_dir" ]]
then
rm --force --recursive "$work_dir"
fi
}
trap cleanup EXIT
work_dir="$(mktemp --directory)"
aggregate_file="${work_dir}/aggregate"
cat "$first" > "$aggregate_file"
…
我是一名学习者,我刚刚创建了一个新的 bash 脚本,它从命令行读取两个文件名并打印它们的内容。但是,它不起作用。我有两个文件:log1.txt 和 log2.txt,它们都以换行符结尾。我的代码基本上是这样的:
File+=$(cat "$first")
File+=$(cat "$second")
echo "$File"
但是,第一个文件的末尾和第二个文件的开头合并为一行。我该如何解决?我已经用谷歌搜索了几个小时,如果有任何帮助,我将不胜感激。
命令替换 trim命令输出中的任何尾随换行符 运行。这种行为是 POSIX 标准强制要求的——否则就没有任何意义,因为 POSIX 指定 all 上的有效文本行UNIXy 系统必须以换行符结束;所以如果不是这样,人们将需要 trim 不断地尾随换行符。
但是,您没有理由将引入换行符作为 shell 的问题:
cat
代表“连接”;当给定多个文件时,它将它们连接在一起。如果您传递给它的参数不超过一个,通常您一开始就没有充分的理由使用它。
File=$(cat "$first" "$second")
Command substitutions 从里面的复合命令中删除标准输出末尾的所有尾随换行符(甚至多个换行符)。解决这个问题的两种主要方法是
- 确保命令替换以其他终止符结束,然后将其删除或
- 使用命令替换以外的东西。
第一个的简单实现是这个模式:
name="$(some_command; echo x)"
name="${name%x}"
避免命令替换的最简单方法是将每个文件连接成一个单独的文件:
cleanup() {
if [[ -d "$work_dir" ]]
then
rm --force --recursive "$work_dir"
fi
}
trap cleanup EXIT
work_dir="$(mktemp --directory)"
aggregate_file="${work_dir}/aggregate"
cat "$first" > "$aggregate_file"
…