bash - ${!prefix@} 当使用 '@' 并且扩展出现在双引号内时
问题描述
我不明白 bash 手册中关于前缀参数扩展的内容。
bash 手册是这样说的:
${!prefix*}
${!prefix@}
扩展为名称以前缀开头的变量的名称,由 IFS 特殊变量的第一个字符分隔。当使用 '@' 并且扩展出现在双引号内时,每个变量名都会扩展为一个单独的单词。
当我在 bash 中执行此操作时:
aaa=1
aab=2
aac=3
echo "${!aa@}"
结果输出是这样的:aaa aab aac
这按预期工作。但是,问题是我在使用时得到了相同的输出,但echo "${!aa*}"
我不明白其中的区别。
解决方案
echo
用空格连接它的所有参数,并在最后用换行符打印结果。改为使用printf
,您可以清楚地看到差异。
$ aaa=1
$ aab=2
$ aac=3
$ printf '<%s>\n' "${!aa@}"
<aaa>
<aab>
<aac>
$ printf '<%s>\n' "${!aa*}"
<aaa aab aac>
此外,while 的单词由;IFS
的扩展中的第一个字符连接*
。IFS
使用时根本不兑现@
。
$ IFS=,
$ echo "${!aa@}"
aaa aab aac
$ echo "${!aa*}"
aaa,aab,aac
推荐阅读
- c++ - 可以使用 boost 序列化来序列化 boost::container::strings 吗?
- android - 将推送通知和来电通知转发到 ble 设备
- r - 叠加直方图和密度估计
- c++ - Libc hypot 函数似乎为 double 类型返回不正确的结果......为什么?
- python - 在 Python 中为机器学习模型总结具有多个值的特征
- c# - 两个不同类的扩展方法
- python - 在从 node/express/tedious 执行 python 脚本之前等待存储过程完全完成
- java - 用于 XML 的带有 CData JDBC 驱动程序的 OAuth - Google Drive 上的文件 - 未使用 CallbackURL
- carousel - 类活动以锚定旋转木马幻灯片
- reactjs - Want to navigate to first page on a button click