[解決済み] ファイルの内容を改行付きでunix変数に入れる
質問
以下の内容のテキストファイルtest.txtがあります。
text1
text2
そして、ファイルの内容をUNIX変数に代入したいのですが、こうすると。
testvar=$(cat test.txt)
echo $testvar
という結果になります。
text1 text2
の代わりに
text1
text2
どなたか解決策を提案していただけませんか?
どのように解決するのですか?
課題は
ではなく
は改行文字を削除するのではなく、実際には
echo
がそうしているのです。改行文字を維持するには、単に文字列を引用符で囲む必要があります。
echo "$testvar"
これで望みの結果が得られます。デモは次のトランスクリプトを参照してください。
pax> cat num1.txt ; x=$(cat num1.txt)
line 1
line 2
pax> echo $x ; echo '===' ; echo "$x"
line 1 line 2
===
line 1
line 2
は
理由
は、改行が空白に置き換えられる理由ではなく
を完全に
と関係するものではありません。
echo
コマンドとは関係なく、むしろいろいろなものが組み合わさっているのです。
コマンドラインが与えられると
bash
のドキュメントに従って 単語に分割します。
IFS
変数のドキュメントに従って単語に分割します。
IFSです。 展開後の単語分割に使われる Internal Field Separator ... デフォルト値は
<space><tab><newline>
.
これは、デフォルトで、これら3つの文字のいずれかを使用して、コマンドを個々の単語に分割できることを指定します。その後、単語のセパレータはなくなり、残るのは単語のリストだけです。
これを
echo
のドキュメント (a
bash
の内部コマンド)を見てみると、なぜスペースが出力されるのかがわかると思います。
echo [-neE] [arg ...]: 空白で区切られた引数を出力し、その後に改行する。
を使うときは
echo "$x"
を使うと、強制的に全体の
x
変数が
シングル
に従って
bash
に従って、それは分割されません。でわかると思います。
pax> function count {
...> echo $#
...> }
pax> count 1 2 3
3
pax> count a b c d
4
pax> count $x
4
pax> count "$x"
1
ここで
count
関数は単に与えられた引数の数を出力します。また
1 2 3
と
a b c d
バリアントがそれを実際に示しています。
次に、2 つのバリエーションで試してみます。
x
変数で試してみます。ひとつは
がなければ
の引用は、4つの単語があることを示しています。
"test"
,
"1"
,
"test"
と
"2"
. 引用符を追加すると
1
という単一の単語
"test 1\ntest 2"
.
関連
-
[解決済み] /bin/sh: apt-get: 見つかりません。
-
[解決済み] シェルで、「2>&1」はどういう意味ですか?
-
[解決済み] Bashで文字列をデリミターで分割するには?
-
[解決済み] Bashでファイルの中身をループする
-
[解決済み] Git上でシェルコマンドを実行する際に使用するSSH-keyの秘密鍵を指定する方法は?
-
[解決済み] UnixツールでJSONをパースする
-
[解決済み] rm, cp, mvコマンドで引数リストが長すぎるというエラーが発生する。
-
[解決済み] シェルでファイルを変数に読み込むには?
-
[解決済み] 大きなテキストファイルを、同じ行数の小さなファイルに分割するにはどうすればよいですか?
-
[解決済み】Bashでファイル名と拡張子を抽出する。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】bashでjsonファイルを解析するために、jqの出力にあるダブルクオートを削除する方法は?
-
[解決済み】shでJenkinsのステージから他のステージに変数を渡す
-
[解決済み] etc/profileでVISIBLE=NOWを設定するのはなぜですか?
-
[解決済み] bashの文字列の等値性テストで、予期しない演算子エラーが発生するのはなぜですか?重複
-
[解決済み] 値がベースに対して大きすぎる(エラートークンは "08")[重複]
-
[解決済み] configureコマンドが見つからない cygwin
-
[解決済み] sed で二重引用符と単一引用符をエスケープするにはどうしたらいいですか?
-
[解決済み] スクリプトからのエラーメッセージを含むすべての端末出力をログファイルにパイプする方法
-
[解決済み] awk で行を飛ばすにはどうしたらいいですか?
-
[解決済み] ターミナルでbashスクリプトを実行するにはどうすればよいですか?