我想在env打印中遍历变量:
name: ${name} value: ${value}
Run Code Online (Sandbox Code Playgroud)
由于多行值,例如,通过换行和迭代简单拆分不起作用
SERVER_TLS_SERVER_CRT=-----BEGIN CERTIFICATE-----
foo
-----END CERTIFICATE-----
Run Code Online (Sandbox Code Playgroud)
用例是解决限制传递多行变量的Docker限制--env-file.
小智 11
老线程,我知道。但对于其他需要 sh 解决方案且不支持 env 的 -0 的人:
env | while IFS= read -r line; do
value=${line#*=}
name=${line%%=*}
echo "V: $value"
echo "N: $name"
done
Run Code Online (Sandbox Code Playgroud)
您可以使用env -0获取空终止的name=value对列表并使用for循环进行迭代:
while IFS='=' read -r -d '' n v; do
printf "'%s'='%s'\n" "$n" "$v"
done < <(env -0)
Run Code Online (Sandbox Code Playgroud)
上面的脚本使用进程替换,这是一个BASH功能.在较旧的shell上,您可以使用管道:
env -0 | while IFS='=' read -r -d '' n v; do
printf "'%s'='%s'\n" "$n" "$v"
done
Run Code Online (Sandbox Code Playgroud)
这是#bash 的解决方案。
unset IFS
args=() i=0
for var in $(compgen -e); do
printf -v 'args[i++]' -e%s=%s "$var" "${!var}"
done
Run Code Online (Sandbox Code Playgroud)
我最初认为这个想法是输出,因此 printf %q 是必要的,但在构建参数数组时情况并非如此,因此可以简化为:
unset IFS
args=()
for var in $(compgen -e); do
args+=( "-e$var=${!var}" )
done
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5220 次 |
| 最近记录: |