gpt4 book ai didi

bash - 我如何结合 "default assignment"并转换为小写?

转载 作者:行者123 更新时间:2023-12-05 01:23:10 25 4
gpt4 key购买 nike

我想结合默认赋值,如here所示, 转换为小写,如 here 所示.

这就是我正在使用的:

bash-3.2$ export MY_ENV_VAR=FaLsE
bash-3.2$ : "${MY_ENV_VAR:=false}"
bash-3.2$ echo $MY_ENV_VAR
FaLsE

我想在单个语句中将 MY_ENV_VAR 的值设置为小写,因为我有 20 多行代码获取环境变量的值,我不想再添加 20 多行自己进行转换。

我尝试了一些方法,例如:

bash-3.2$ : "${MY_ENV_VAR:=false,,}"
bash-3.2$ echo $MY_ENV_VAR
FaLsE

如果我有 Bash 4 但我使用的是 3.2,该方法似乎会起作用。

我也试过:

bash-3.2$ myval=$(: "${MY_ENV_VAR:=false}" | tr '[:upper:]' '[:lower:]')
bash-3.2$ echo $myval

bash-3.2$

和:

bash-3.2$ myval=$(: echo "${MY_ENV_VAR:=false}" | tr '[:upper:]' '[:lower:]')
bash-3.2$ echo $myval

bash-3.2$

我没想到它会起作用,但我对默认赋值的理解不够,无法知道如何使用它来将转换提供给小写。我发现 Bash 的某些特性很难理解。

最佳答案

由于您使用的是 Bash,因此请使用内置的大小写修改:

#!/bin/bash

export MY_ENV_VAR=
for MY_ENV_VAR in FaLsE '' tRuE
do
# Expands to lower-case
MY_ENV_VAR=${MY_ENV_VAR,,}

# Assigns default value
MY_EN_VAR=${MY_ENV_VAR:=false}

# Prints it to see
printf 'MY_ENV_VAR=%s\n' "$MY_ENV_VAR"
done

实际输出符合预期:

MY_ENV_VAR=false
MY_ENV_VAR=false
MY_ENV_VAR=true

现在,与其对每个变量重复 20 多次,不如将其变成一个函数:

exportLowerDefault() {
local -- v=${!1}
v=${v,,}
v=${v:=$2}
export "$1"="$v"
}

for MY_ENV_VAR in FaLsE '' tRuE
do
exportLowerDefault MY_ENV_VAR false

# Prints it to see
printf 'MY_ENV_VAR=%s\n' "$MY_ENV_VAR"
done

关于bash - 我如何结合 "default assignment"并转换为小写?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72802710/

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