如何从函数中的读取命令返回数组?

在这里,bash有一个小问题 我用简单的array编写了function,我需要使用return命令将array作为read,并且还需要call不知何故。

function myData {
    echo 'Enter the serial number of your items : '
    read -a sn
    return ${sn[@]}
}

例如这样???

  

$ ./myapp.sh   
输入您的商品的序列号:92467 90218 94320 94382

myData    
echo ${?[@]}

为什么我们没有其他语言那样的返回值? 谢谢您的帮助...

xj0605 回答:如何从函数中的读取命令返回数组?

正如其他人提到的那样,内置命令return旨在将exit status发送给调用方。
如果要将函数中的处理结果传递给 呼叫者,将有几种方式:

  1. 使用标准输出

    如果您在函数中的标准输出中写入内容,则输出 重定向到呼叫者。标准输出只是非结构化的 字节流。如果要使其具有特殊含义,例如 array,您需要通过为某些对象分配定界符来定义结构 字符。如果您确定每个元素都不包含空格,制表符或 换行符,您可以依靠IFS的默认值:

    myfunc() {
        echo "92467 90218 94320 94382"
    }
    
    ary=( $(myfunc) )
    for i in "${ary[@]}"; do
        echo "$i"
    done
    

    如果数组的元素可能包含空格或其他特殊字符 字符,您需要保留它们(例如您正在处理的情况 文件名),则可以使用空字符作为分隔符:

    myfunc() {
        local -a a=("some" "elements" "contain whitespace" $'or \nnewline')
        printf "%s\0" "${a[@]}"
    }
    
    mapfile -d "" -t ary < <(myfunc)
    for i in "${ary[@]}"; do
        echo ">$i"           # The leading ">" just indicates the start of each element
    done
    
  2. 通过引用传递

    与其他语言一样,bash> = 4.3具有通过以下方式传递变量的机制: 参考或按名称:

    myfunc() {
        local -n p="$1"     # now p refers to the variable with the name of value of $1
        for (( i=0; i<${#p[@]}; i++ )); do
            ((p[i]++))      # increment each value
        done
    }
    
    ary=(0 1 2)
    myfunc "ary"
    echo "${ary[@]}"        # array elements are modified
    
  3. 将数组用作全局变量

    无需解释其用法和优点/缺点。

希望这会有所帮助。

本文链接:https://www.f2er.com/2974426.html

大家都在问