bash - 我可以通过 bash 参数扩展将 bash 脚本变量设置为命令的输出和所有小写字母吗?
问题描述
我想为命令的输出设置一个 bash 变量并确保它都是小写的。我想保持我的代码尽可能干净,而不是在任何地方管道输出。
这是我之前的:
host=$(hostname -s | tr '[:upper:]' '[:lower:]')
相反,我现在使用两个定义(稍微短一些):
host=$(hostname -s); host=${host,,}
但我想知道是否可以在没有管道到 tr (或其他任何东西)的情况下仅在主机的一个定义中做到这一点。第二行可以进一步合并吗?
编辑:这正是我应该复制/粘贴我的代码的原因。事实上,我确实在我的脚本中有'[:upper:]'
and '[:lower:]'
,但输入错误。
解决方案
如果您有 Bash 4.0(2009 年发布),您可以声明host
以便在赋值时自动转换为小写:
declare -l host
host=$(hostname -s)
如果代码在函数中,那么最好尽可能本地化变量,所以
local -l host
host=$(hostname -s)
仅比不小写主机名的代码稍长。
可以同时进行声明和赋值
declare -l host=$(hostname -s) # BAD CODE
但是Shellcheck会正确地抱怨这掩盖了 的退出状态hostname
,因此您无法检测或处理错误。
在这种特殊情况下,如果您使用 Bash 内置HOSTNAME
变量而不是外部hostname
命令,则可以安全地同时进行声明和赋值:
declare -l host=${HOSTNAME%%.*}
推荐阅读
- react-native - 导航器外的导航不起作用
- python - Python 不匹配正则表达式检查
- python - 尝试使预训练的 BERT 适应句子语义分离的另一个用例
- python - conda install packages 错误:收集包元数据(current_repodata.json):失败
- sql - 新手:将数据批量添加到 sqlite 数据库的最简单方法是什么?
- rust - 即使 src/main.rs 可用, cargo 也不会构建
- arrays - 使用父 ID 将平面 JSON 字符串转换为层次结构
- python - 使用 OpenCV Python 运行硬件优化的 NVIDIA 光流
- mongodb - 当localField为字符串且foreignField为ObjectId格式时的Mongodb $lookup
- java - 单击按钮时如何延迟程序(java swing)