【发布时间】:2022-10-25 00:07:06
【问题描述】:
我继承了一个shell脚本,它有以下代码
while IFS='=' read -r key value
do
# echo "key ${key}"
if [[ ${key} =~ ^# ]]; then
# echo "comment line ${key}, skipping....."
continue
fi
eval ${key}=\${value}
echo "key: ${key}, value: ${value}"
done <kafka-parameters.txt
其中 kafka-parameters.txt 文件包含如下条目
#Schema Registry
DEV_SR_URLS=http://sr1-dev:8081, http://sr2-dev:8081
QA_SR_URLS=http://sr1-qa:8081, http://sr2-qa:8081
STAGE_SR_URLS=http://sr1-qa:8081, http://sr2-qa:8081
PROD_SR_URLS=http://sr1:8081, http://sr2:8081
#
#Bootstrap Servers
DEV_BOOTSTRAP_SERVERS=broker1-dev:9092,broker2-dev:9092,broker3-dev:9092
QA_BOOTSTRAP_SERVERS=broker1-qa:9092,broker2-qa:9092,broker3-qa:9092
STAGE_BOOTSTRAP_SERVERS=broker1-qa:9092,broker2-qa:9092,broker3-qa:9092
PROD_BOOTSTRAP_SERVERS=broker1:9092,broker2:9092,broker3:9092
#
在上面的 sn-p 中,${value} 前面的 "\" 的目的是什么?
据我了解,eval ${key}=${value} 创建了一个名为 ${key} 的变量并将 ${value} 的值分配给它,并且 eval 使该分配在循环后可用。
这个对吗?还是不明白 \${value} 的用途
或者有什么区别
eval ${key}=\${value}
and
eval ${key}=${value}
【问题讨论】:
-
当涉及到 eval 时,通常需要这样的代码。 \${value} 延迟 ${value} 的评估,直到运行 eval 语句。如果没有反斜杠,$value 将在整个脚本中具有一个常量值,在读取脚本时设置。使用反斜杠,在执行 eval 时扩展 ${value}。
-
那么,这个 bash 是否等同于延迟扩展在 Windows 批处理脚本中的工作方式?似乎是这样。