前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >我们在何时需要对Shell变量使用花括号?

我们在何时需要对Shell变量使用花括号?

作者头像
程序熵
发布2024-05-27 15:56:22
1320
发布2024-05-27 15:56:22
举报
文章被收录于专栏:技术汇技术汇

问题

在Shell脚本中,在什么情况下需要在变量扩展时使用 {}

例如,我见过以下用法:

代码语言:javascript
复制
var=10        # 声明变量

echo "${var}" # 变量的一种使用方式
echo "$var"   # 变量的另一种使用方式

这两者有显著的区别吗,还是仅仅是一种风格?是否有一种是更受推荐的?


回答

在上述特定的示例代码中,没有区别。但是,当你想要在字符串中扩展变量 foo 时,${} 中的 {} 是有用的:

代码语言:javascript
复制
"${foo}bar"

因为 "$foobar" 将会扩展变量 foobar,而不是预期的变量 foo

变量名的结尾后面通常是空格或换行符。但如果我们不想在打印变量值后接着打印空格或换行怎么办?这时就需要用花括号告诉 Shell 解释器变量名的结束位置。

花括号还无条件需要在以下情况下使用:

  • 扩展数组元素,如:${array[5]}
  • 使用参数扩展操作,如:${filename%.*}(移除扩展名;剥离最小的匹配)
  • 扩展总数超过 9 的位置参数,如:"{10} {11}"

在所有情况下都使用 {},而不仅仅是在可能产生歧义的情况下,可以被认为是良好的编程实践。这既是为了一致性,也是为了避免像 foo_bar.jpg 这样的意外,其中下划线成为变量名的一部分并不明显。

你还可以在花括号内进行一些文本操作:

代码语言:javascript
复制
STRING="./folder/subfolder/file.txt"
echo ${STRING} 
echo ${STRING%/*}   #从右向左查找匹配,并将匹配的部分删除
echo ${STRING%/*/*}

或者

代码语言:javascript
复制
STRING="This is a string"
echo ${STRING// /_}     #字符串替换

朋友们可以执行测试一下上述命令,看输出什么内容。


参考

  • stackoverflow question 8748831
  • https://www.gnu.org/software/bash/manual/bash.html#Shell-Parameter-Expansion
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-05-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序熵 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 问题
  • 回答
  • 参考
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档