首页 > 解决方案 > 为什么 sed 使用 shell 变量失败,但使用它们的值成功?

问题描述

我想sed用 base64 编码的 tls 键替换 yaml 文件中的特定字符串:

TLS_KEY=`cat tls.key | base64`
sed -i "s/##TLS_KEY##/${TLS_KEY}/" 02-elastic-tls.yaml

然后我得到这个错误:

sed: -e expression #1, char 90: unterminated `s' command

但是如果我${TLS_KEY}在上面的命令中直接替换为它的值,它就会成功。

执行echo ${TLS_KEY}:

LS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCk1JSUV2UUlCQURBTkJna3Foa2lHOXcwQkFRRUZB QVNDQktjd2dnU2pBZ0VBQW9JQkFRRENtUHJVa29ibGpKT3oKOGJtMHZodzNwRHdLa0M2TGJaUjd5 enFWVkpuc2VTQkI4Z0E3aExkYmNBRDJTTWp6SDBQUEpEelE1elJ5dnJBYQpSK3N3QU1BeFhwQVdH Ulp5S2RsTkVTTDhuREZvNGJ2ODB1enQrdWZiSEFZTGl2OVByMHpRRnA2cjh5U3BlTXNkCm5xNnh1 K3ZaMHJ1ZWpxdkxhZEVSMFNra0h1VUp4bExGVjY1bzFFREdzYzhKVlBYaXFFUzdRcXhTTnhtS0Nt VzAKdFdMbWd6YUZ2d2tjcFpHbWJjTmpsMFZraG9ZTjFVZk51M0FURHJ3eUJQUmZIYWJvVGFSVlFm WmE5Q3dpSThPZgpXVzR0ZnA3eW9GcFRhSDlURUdxYldzY1VMa3MvamdlbW15eHZPY1Y0bG04SXgw dHhLT2J1R0ZWVGp2dlBnb0JuCnJLb2V5UVMzQWdNQkFBRUNnZ0VBUjEwV3o1SVV5bVh0WE5aUEJr dVp5WVgvUnRodFdWQ01YWUhBTURkZ1kycGcKUEE3bHF1NFcxLytST3NDaWdSWjhKYURpZExIMWVB Y2FTZWtLQlFhaGRQbDYyYi9GallSdlhtWGtjTU5QRTJtRgpLVWlvL3ZVK3hnblc1YkRKeEkxREhD VFBkN3VwUEVWQ0o5Q2p2Q1p3YmVkc1NzK0RqUXQzVXBOa0JRMFhiYWViCkpTVnk2ellCckFVOGZN cTV3empmTUFKVk0yZ0VaK3JYMERxc003T0IvRVpIWEI4dktkc3RKbCtWSmZWNnVBVjAKbTkxZnFG MzZmVGZYbWlxL29qMjZqdVZ1MkRBaVhqQWZQUzBRalVhOFRjVW1ZeFp4NVVaa052YWs2aGFwM1ND TwpXS2VjM0l4TWpra2xldUY0RGlBWHJHRnQ2WGxHN0RCQm13SUkrM3NRb1FLQmdRRHo2dk9HaUdn cVNQZHNaZ2lKCnd5NHhjT0JkZjRFbzRrZG9HYmduWEZ5eCtPSzczRThHZWZxdExMdjlzc2YxUUpC dmFkdFhZU21uNU5lNFBMNVoKTlFPcWxRSFhGcHhqcFA5WUxhbmdnRGR3S2ZzSVRxWnA0SDZLV0k5 aEdFeCtGcmRmUzlDY2JTTkpQcGk4dHhNVwpaV0gyeXUrZXZSS0VYYUZmMFZUZ1VMcHFUd0tCZ1FE TVBKMGVwVFg5WDluemY4Qi9VVkhKWnQ4V3dZY0Mzc1pBCnZkWUNSZFdYSm5RWE0zR2dxRTF1OGx2 dlZXNWZrMWdDNnlFWTlBdUZ1bCtGM1VoTVdRTlRhTWVpWHVCUEpJUVQKdEREalJQRmJXRGFyalo4 K0hrVXJObGdtVFEweVNhNzV1RVVhZWhqeDFjTkpLcCswSDZiQVNSRWdwWWpzdVhJSQpsaUk3ZGw5 dEdRS0JnUUNLZHA2bGlUdXdmVmxQUktDbUs1RkdhYkJFQTBSN3cvQUxMVVozdVp1NVAvTGQ5OU00 CmR2Z1JaR3FYT3V6OTBSZnMxeWUzYzZXazlHaHM0cmFmaDFPOGV2ZmZkS3QwZVU2bWJNMlpicytK c1pzYWZTTkUKeVRhc0xGZkFJMzRRdWE2QXYxWDk1b3A0WXJ0cnJYVjlhakh4V2dRcWxXUTBsYjRz MlhVWUhWdWxTd0tCZ0Q4Mwo2L0tXZFJYTzI2b1J1MFl0cDhGTnhIUkl4ei9PTVZQTTd6ZVk0anA5 UHFZSDJINUFXbWVqUVczZDVlSlR1NFI3CnY2ejNyYkZoTlR3OGVLcVpTdnhBakxybjMwcmdKTG5z cHMxU2c5c2dmUnV4SkwrWG94VnpKdW9FSTdlVE0wUTkKRTdiVVlIQkxHTDNISWRRaGovNHBIOUla S3o4TFVBNzBXZmhKOWRQUkFvR0FjNG5XYnU4Q0tFRzBPSCtmKzYrSAo1bnNmaDc3UUhiZEJLK2Za ZXQybFhrMjREUUlxUGZCVUR6clpINTVxenZPb2Z5T2tRbzI3cGZBT1gwS1l6dHBECm54cUVWd2kr WHhOaTAvRUxSSTdEanc5KzF4TkQ0N3NZTFhyd2dMZHpWQWtRengrSXM4Y3JGQU9iMi92cGNNYm0K RU4wNzJOV1lXUy9LZllzdXQ0Z2ZONVE9Ci0tLS0tRU5EIFBSSVZBVEUgS0VZLS0tLS0K

那么为什么我得到这个错误?

标签: shellsed

解决方案


echo ${TLS_KEY}注意和之间的区别echo "${TLS_KEY}"

$ x="123
> 456"
$ echo $x
123 456
$ echo "$x"
123
456

我怀疑您的密钥中存在换行符,它们会中断sed

$ echo abc | sed "s/abc/$x/"
sed: -e expression #1, char 7: unterminated `s' command

推荐阅读