1

こんにちは、ユーザーがファイル名を入力するとファイルから読み取るプログラムがあり、それ以外の場合は入力を求めます。

現在私はやっています:

    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

4 に答える 4

4

echo will suppress the newlines. You don't need the additional $input variable as you can directly redirect cat's output to the file:

file=stdinput.txt
cat > "$file"

Also it makes more sense for me to define $file before the cat. Have changed this.


If you need the user input in both the file and $input then tee would suffice. If you pipe the output of cat (user input) to tee the input will be written to both the file and $input:

file=stdinput.txt
input=$(cat | tee "$file")
于 2013-11-01T22:32:24.673 に答える
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
$ 
于 2013-11-01T22:40:49.170 に答える
0

役に立ちますかprintf

printf "$input">stdinput.txt
于 2013-11-01T22:45:39.060 に答える
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この場合)。区切り文字列は何でもかまいません。

于 2013-11-01T22:40:37.140 に答える