gpt4 book ai didi

linux - 使用 "read"设置变量

转载 作者:太空狗 更新时间:2023-10-29 11:42:50 26 4
gpt4 key购买 nike

在 CLI 的 bash 中我可以做:

$ ERR_TYPE=$"OVERLOAD"
$ echo $ERR_TYPE
OVERLOAD
$ read ${ERR_TYPE}_ERROR
1234
$ echo $OVERLOAD_ERROR
1234

这对于动态设置我的变量名非常有效;在脚本中它不起作用。我试过:

#!/bin/env bash

ERR_TYPE=("${ERR_TYPE[@]}" "OVERLOAD" "PANIC" "FATAL")

for i in "${ERR_TYPE[@]}"
do
sh -c $(echo ${i}_ERROR=$"1234")
done
echo $OVERLOAD_ERROR # output is blank

# I also tried these:
# ${i}_ERROR=$(echo ${i}_ERROR=$"1234") # command not found
# read ${i}_ERROR=$(echo ${i}_ERROR=$"1234") # it never terminates

我如何像在 CLI 中那样在脚本中设置变量?谢谢

最佳答案

当您使用动态变量名称而不是关联数组时,您确实需要质疑您的方法。

err_type=("OVERLOAD" "PANIC" "FATAL")
declare -A error
for type in "${err_type[@]}"; do
error[$type]=1234
done

不过,在 bash 中你会使用 declare:

declare "${i}_error=1234"

您的方法失败了,因为您生成了一个新的 shell,传递了命令 OVERLOAD_ERROR=1234,然后 shell 退出了。您当前的外壳完全不受影响。

改掉使用 ALLCAPSVARNAMES 的习惯。有一天,您将编写 PATH=... 然后想知道为什么您的脚本被破坏了。

关于linux - 使用 "read"设置变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35388659/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com