91861
シェルスクリプトでソースコード内にある`<#CLIENT_KEY#>`という文字列を`12345789
`に置き換えたいのですが、エラーになってしまって実行できません。

```

    ./ci_post_clone.sh:13: parse error near `\n'
    
```

おそらく`<# #>`がコメント形式のためエラーになってしまっているのですが、どのように対処すればよいでしょうか？

```

    #!/bin/zsh
    
    #  ci_post_clone.sh
    
    env_file_path="./Source.c"
    
    typeset -A envValues
    
    CLIENT_KEY=12345789
    CLIENT_SECRET_KEY=987654321
    
    envValues[<#CLIENT_KEY#>]=$CLIENT_KEY
    envValues[<#CLIENT_SECRET_KEY#>]=$CLIENT_SECRET_KEY
    
    for key in ${(k)envValues}
      sed -i -e "s/${key}/${envValues[$key]}/g" "${env_file_path}"
    
```
CC BY-SA 4.0
2022-10-27T06:46:10.310
91858
2022-10-27T08:17:03.477
2022-10-27T08:17:03.477
3060
40856
question
zsh shell
シェル内のコメント用記号`<# #>`を文字列として扱いたい
置換後の文字列をいったん変数に代入して、その変数を参照するようにすればうまくいくと思います。  
代入するときは`'`でクォートする必要があります。

```

    #!/bin/zsh
    #  ci_post_clone.sh
    env_file_path="./Source.c"
    typeset -A envValues
    CLIENT_KEY=12345789
    CLIENT_SECRET_KEY=987654321
    r1='<#CLIENT_KEY#>'
    r2='<#CLIENT_SECRET_KEY#>'
    envValues[$r1]=$CLIENT_KEY
    envValues[$r2]=$CLIENT_SECRET_KEY
    
    for key in ${(k)envValues}
      sed -i -e "s/${key}/${envValues[$key]}/g" "${env_file_path}"
    
```
CC BY-SA 4.0
2022-10-27T07:04:58.950
91859
2022-10-27T07:32:47.470
2022-10-27T07:32:47.470
35558
35558
91858
answer
既に解決済みですが、`sed` コマンドの `-f` オプションを使う方法もあります。

```

    #!/bin/sh
    
    env_file_path='./Source.c'
    
    cat <<EOT | sed -i -E -f- "${env_file_path}"
    s/<#CLIENT_KEY#>/12345789/g
    s/<#CLIENT_SECRET_KEY#>/987654321/g
    EOT
    
```
CC BY-SA 4.0
2022-10-27T07:47:08.363
91861
2022-10-27T07:47:08.363
47127
91858
answer