arrays - Bash - 从变量中打印键和值
问题描述
鉴于:
array(a1)=123
array(b1)=456
我的命令是:
for test in ${array[@]}; do
echo "Hello "$!test "$test" Hi"
done
输出是:
Hello test 123 Hi
Hello test 456 Hi
预期输出为:
Hello a1 123 Hi
Hello b1 456 Hi
解决方案
test
是一个普通变量,不存储对数组的任何引用。在您的情况下,写作$!test
与写作相同${someUndefinedVariable}test
(见✱)。未定义的变量将扩展为空字符串。test
是一个文字字符串。
要打印键和值,您必须遍历键并手动检索相应的值:
declare -A array
array[a1]=123
array[b1]=456
for key in "${!array[@]}"; do
echo "key=$key, value=${array[$key]}"
done
顺便说一句,我很惊讶你的命令甚至运行没有错误;"
缺少关闭。不能嵌套引号。在第一个之后"
,第二个"
将结束报价:
|quoted| |quoted |started quote without end -->
| | | | |
"Hello "$!test "$test" Hi"
| | | |
|unquoted |unquoted
✱$!
实际上是一个特殊变量,包含最后一个后台命令的进程号。由于您没有在会话中启动任何后台命令,$!
因此为空。
推荐阅读
- r - 如何按时间段总结一个小标题?
- paypal - 在没有服务器后端的静态 HTML/JS 网站上完成 PayPal 付款。如何渲染完成的支付页面?
- java - Java 数组列表
没有按要求工作 - qt - 如何向模型中没有的 QML ComboBox 添加额外的项目?
- python - 使用 Python 的 matplotlib 3D API 的轮廓问题
- typescript - 是否可以使用泛型类型来确定运行时功能?
- winforms - 类中的 Powershell winform 事件处理程序导致范围问题
- angular - 在 Angular Datatable 中隐藏几行
- vb.net - 如何将添加在图片框中的用户控件翻转 180 度?
- assembly - 汇编代码指令“pushq”不能将 64 位的东西压入堆栈?