在 shell 脚本中,如何输出一个变量而不改变它是否有换行符?

在 shell 脚本中,如何输出一个变量而不改变它是否有换行符?

我有一个 shell 脚本,它从另一个 shell 脚本获取输入。该流通过管道传输到 stdin。

我需要将 stdin 流的所有字节捕获到 shell 脚本中的单个变量中。然后对其执行一些操作,并通过 stdout 将其发送回去。

我遇到的问题是,有时输入文件中有尾随换行符,但有时没有。如果没有,那么我不想添加。但是,如果有尾随换行符,我想保留它。

问题是,无论我尝试什么,系统要么始终输出不带尾随换行符(如 的情况printf),要么始终输出带有换行符(如 的情况echo)。

echo请告诉我一个进程(不是或)的名称是什么,printf它只接受一个变量并将其逐字逐句地逐字节地通过 stdout 输出。我尝试了所有可能的选项,printf但没有一个能保留尾随换行符。

谢谢。

答案1

回显-e“$var”将要输出尾随换行符。也许你忘了引号?问这样的问题时,一定要显示你尝试过的内容。

答案2

我最终在代码中使用的解决方案如下:

function filter() {
    #do lots of sed operations
    #see https://github.com/gistya/expandr for full code
}

GIT_INPUT=`cat; echo x`
FILTERED_OUTPUT=$(printf '%s' "$GIT_INPUT" | filter)
FILTERED_OUTPUT=${FILTERED_OUTPUT%x}
printf '%s' "$FILTERED_OUTPUT"

相关内容