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


1

我有一个shell脚本,从另一个shell脚本获取输入。流在stdin上传输。

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

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

问题在于,无论我尝试什么,系统总是输出没有尾随换行符(如同的情况) printf )或者它总是以换行符输出(如同的情况) echo )。

请告诉我一个过程的名称是什么(不是 echo 要么 printf )它简单地接受一个变量并逐字逐句地逐字节输出它。我已经尝试了所有可能的选择 printf 并且它们都不能保留尾随换行符。

谢谢。


我相信你问了 你问的问题 如何在不剥离任何尾随换行符的情况下将stdin捕获到变量? 我相信, 正如你在其他问题中指出的那样 ,如果你读取stdin并将其保存到shell变量中,那么任何尾随的换行都会被剥离。因此,在此之后,任何命令都无法区分这两种情况。 ...... ...... P.S.请不要同时在多个Stack Exchange站点(例如,超级用户和U& L)上发布几乎相同的问题。
G-Man

Answers:


0

echo -e“$ var” 输出尾随换行符。也许你忘记了引号?在询问此类问题时,请始终展示您尝试过的内容。


0

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

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"
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.