在Shell中读取多行用户输入

时间:2013-11-01 22:29:32

标签: linux bash shell

嗨我有一个程序,如果用户输入我从文件中读取的文件名,我会提示他们输入。

目前我在做:

    input=$(cat)
    echo $input>stdinput.txt
    file=stdinput.txt

这个问题是它没有读取输入中的换行符,例如我输入

s,5,8
kyle,5,34,2 
j,2

输出

s,5,8 k,5,34,2 j,2

要存储在文件中的预期输出是

s,5,8
kyle,5,34,2 
j,2

我需要知道如何在阅读时包含换行符。?

4 个答案:

答案 0 :(得分:4)

echo会取消换行符。您不需要额外的$input变量,因为您可以直接将cat的输出重定向到文件:

file=stdinput.txt
cat > "$file"

$file之前定义cat对我来说更有意义。改变了这一点。


如果您需要文件和$input中的用户输入,那么tee就足够了。如果将cat(用户输入)的输出传输到tee,则输入将写入文件和$input

file=stdinput.txt
input=$(cat | tee "$file")

答案 1 :(得分:1)

在回显变量时尝试引用变量:

input=$(cat)
echo "$input">stdinput.txt
file=stdinput.txt

示例:

$ input=$(cat)
s,5,8
kyle,5,34,2 
j,2
$ echo "$input">stdinput.txt
$ cat stdinput.txt 
s,5,8
kyle,5,34,2 
j,2
$ 
实际上,没有引用变量会导致你描述的情况

$ echo $input>stdinput.txt
$ cat stdinput.txt 
s,5,8 kyle,5,34,2 j,2
$ 

答案 2 :(得分:0)

您可以使用以下语法:

#!/bin/sh

cat > new_file << EOF
This will be line one
This will be line two
This will be line three
   This will be line four indented
Notice the absence of spaces on the next line
EOF

此处cat读取文字,直到遇到分隔符(在我们的例子中为EOF)。 Delimeter字符串可以是任何东西。

答案 3 :(得分:0)

printf会有帮助吗?

printf "$input">stdinput.txt