首页 > 解决方案 > 如何遍历带有空格的字符串数组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;
}

标签: arraysbashshellfor-loop

解决方案


您应该引用您的变量(使用未引用的变量应该是例外):

for func in "${dotfilesFunctionAlias[@]}"; do
    echo "$func";
done;

如果没有双引号,${dotfilesFunctionAlias[@]}则展开并func依次获取每个单词的值。双引号保留空格。

此外,您应该谨慎使用echoprintf改为使用。如果您的某个函数的名称以有效echo选项(-e-n等)开头,echo "$func"则将无法按预期工作。

最后,printf你根本不需要任何循环。以下命令足以打印您的数组。

printf '%s\n' "${dotfilesFunctionAlias[@]}"

推荐阅读