arrays - 如何遍历带有空格的字符串数组bash
问题描述
functions
当我在我的 bash 终端中调用时,我想要做的是列出我所有的别名有点像这样
$ functions
functions -> List all functions
fs -> Determine size of a file or total size of a directory
最终发生了,它是否列出了每个单词,所以输出看起来像这样
functions
->
List
all
...
如何迭代得到一个数组
['functions -> List all functions', 'fs -> Determine size of a file or total size of a directory]
我可以迭代吗?
下面列出了我的实现
declare -a dotfilesFunctionAlias=()
function appendFunction(){
dotfilesFunctionAlias+=( "$1->$2" )
}
appendFunction "functions" "List all functions";
function functions(){
for func in ${dotfilesFunctionAlias[@]}; do
echo $func;
done;
}
解决方案
您应该引用您的变量(使用未引用的变量应该是例外):
for func in "${dotfilesFunctionAlias[@]}"; do
echo "$func";
done;
如果没有双引号,${dotfilesFunctionAlias[@]}
则展开并func
依次获取每个单词的值。双引号保留空格。
此外,您应该谨慎使用echo
并printf
改为使用。如果您的某个函数的名称以有效echo
选项(-e
、-n
等)开头,echo "$func"
则将无法按预期工作。
最后,printf
你根本不需要任何循环。以下命令足以打印您的数组。
printf '%s\n' "${dotfilesFunctionAlias[@]}"
推荐阅读
- java - 使用线程进行异常处理的最佳实践解决方案/通知父线程有关 Java 中的错误
- python - 为什么在 SQL 注入攻击中使用 " 而不是 ' 时结果不同?
- python - 带有css和javascript的Django静态文件夹不会加载
- node.js - MongoDB/javascript 在数组中使用数组
- javascript - React js textarea onchange不适用于值
- scala - Scala DataFrame - 如何仅打印具有最大值的行
- php - 不持久化数据的表单 Symfony 5
- python - ValueError:检查目标时出错:预期dense_16的形状为(1,)但得到的数组形状为(30,)
- android - 为什么根元素的布局属性没有膨胀?
- javascript - 显示与父元素具有相同类名的html子元素并隐藏其他元素