質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
bash

bash(Bourne-again-Shell)は sh(Bourne Shell)のインプリメンテーションに様々な機能が追加されたシェルです。LinuxやMac OS XではBashはデフォルトで導入されています。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Q&A

解決済

1回答

1020閲覧

ヒアドキュメントを変数に渡したい

teityura

総合スコア84

bash

bash(Bourne-again-Shell)は sh(Bourne Shell)のインプリメンテーションに様々な機能が追加されたシェルです。LinuxやMac OS XではBashはデフォルトで導入されています。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

0グッド

0クリップ

投稿2020/06/10 15:03

変数(tmp)に複数行の文字列を入れます。

これはダメです。

cat << 'EOF' | tmp=$(cat) #DB = [ BACKEND = "sqlite" ] DB = [ backend = "mysql", server = "localhost", port = 0, user = "userrr", passwd = "passwddd", db_name = "dbbb" ] EOF echo -e "$tmp" aaa

これはいいですけど、

tmp=$(cat << 'EOF' #DB = [ BACKEND = "sqlite" ] DB = [ backend = "mysql", server = "localhost", port = 0, user = "userrr", passwd = "passwddd", db_name = "dbbb" ] EOF ) echo -e "$tmp" #DB= ... (略) OK

ほんとはこういう感じのがいいです。

cat << 'EOF' | tmp=$(cat) cat << 'EOF' > tmp

もし、文字列に()が混じっていると、ダメです。
と思ったら、できました。
これはbashのバージョンの違いによるのでしょうか。
()混じるとがダメですのソース

tmp=$(cat <<EOD 1) aaa 2) bbb 3) ccc choose a number (1-3) ? EOD ) echo -e "$tmp" 1) aaa ... (略) OK bash --version GNU bash, バージョン 4.2.46(2)-release (x86_64-redhat-linux-gnu)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

質問中にある
>これはbashのバージョンの違いによるのでしょうか。
の答えではないけれど、タイトルを実現する方法はStackOverflowにありました。
https://stackoverflow.com/questions/1167746/how-to-assign-a-heredoc-value-to-a-variable-in-bash

bash

1#!/bin/bash 2 3read -r -d '' tmp <<EOF 4#DB = [ BACKEND = "sqlite" ] 5DB = [ backend = "mysql", 6 server = "localhost", 7 port = (0), 8 user = "userrr", 9 passwd = "passwddd", 10 db_name = "dbbb" ] 11EOF 12 13echo "$tmp" 14 15echo "----------------------" 16 17read -r -d '' tmp <<EOD 181) aaa 192) bbb 203) ccc 21 22choose a number (1-3) ? 23EOD 24 25echo "$tmp"

投稿2020/06/10 16:06

e-watt

総合スコア84

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

teityura

2020/07/26 17:56

ありがとうございます。 read を使った方法参考にさせていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問