シェル変数をファイルの内容に設定するエレガントな方法はありますか?


11

ファイルにいくつかの構成データがあるとしますconfig。便宜上、このデータをシェル変数にロードしますCONFIG_DATA

明らかに私はできる:

CONFIG_DATA="$(cat config)"

しかし、このことはcat私にとっては役に立たないようなものです。これがこれを行う唯一の方法ですか?それとも、よりエレガントな方法がありますか?

回答はPOSIXを優先する必要がありますが、任意のシェルを使用できます。


2
このようにメモリ内のファイル全体を読み取ることは、どのように書いたかに関係なく、ほとんど常に悪い考えです。
佐藤桂2016

2
@SatoKatsuraは、場合によっては非常に当てはまります。ただし、この質問のために、ファイルが非常に小さいと想定する場合があるので、それは大きな問題ではありません。
2016

1
@佐藤桂:なぜ?
RemcoGerlich 2016

回答:


23

BashとZシェルでは、少なくともより高速な方法があります。

CONFIG_DATA=$(<config)

Bourne Againシェルのmanページから引用するには:

コマンド置換$(cat file)は、同等の高速な$(<file)で置き換えることができます。


1
私はこれを良いオプションだとは思いません。OPの猫の無用な使用に対する気持ちが何であれ、OPの例はほとんどのBashユーザーが理解できるほど単純です。また、非常にポータブルです。現在$(<file)はあまり一般的ではないため、WTFが大幅に増える可能性があります。このような構成を変数にロードする場合、この操作による速度の向上はおそらくごくわずかです
MatthewRock

6
@MatthewRockは、多くの非常に悪い習慣が一般的であり、よく知られていることに注意しています。catの無用な使用は1つの例でfor i in $(cat file); do ...あり、別の例です。それらが一般的であることは、悪いツールを使い続ける理由にはなりません。これは猫のこの特定の使い方が悪いということを言っているわけではありません。もっとポータブルな方法があるかどうかはわかりません。普通でおなじみの!=良いと言っているだけです。
テルドン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.