Bashでファイルの変数に値を代入したい


コマンドで設定した変数をファイルの変数に代入したいのですが、代入する方法が分からず困っています。  
ファイルの中の変数に、ファイル外の値を代入する方法はないのでしょうか？  
以下、 `$ bash ./test.sh`を実行し、  
sample.jsonが`"green": "123"`になるような結果を得たいです。

**sample.json**

[code]

    {
        "red": "aaaaa",
        "green": "$ver",
        "yellow": "ccccc",
        "blue": "ddddd"
    }
    
[/code]

**test.sh**

[code]

    #!/bin/bash
    ver="123"
    cat docs/template.json
    
[/code]

ディレクトリ構成↓

├─sample.json  
└─test.sh

echoコマンドでtest.sh内で変数を表示することはできているので、  
試しにcatコマンドを使って変数を出力できないかとtest.shを書き換えて試しましたが、  
そもそも変数を出力することができず、困っています。  
**test.sh**

[code]

    #!/bin/bash
    ver="1234"
    echo $ver
    # cat docs/template.json
    cat << EOS > sample1.json
    $ver
    EOS
    
[/code]

得られたsample1.json

[code]

    
    
[/code]




`envsubst`を使ってみては？環境変数を展開してくれます。

[code]

    cat sample.json | ver=123 envsubst 
    
[/code]

**参考**

  * [低機能でポータブルなテンプレートエンジンが欲しい→そこでenvsubstですよ - Qiita](https://qiita.com/hnw/items/3d8bad7852510c3a84d7)
  * [bashで環境変数をexportせずにシェルスクリプトを実行したい場合はコマンドの前に記述することで代替できる - コード日進月歩](https://shinkufencer.hateblo.jp/entry/2018/10/19/235900)
    * `ver=123`が何をしてるかの説明です。

