【问题标题】:mutiple returns from a function in a shell script从 shell 脚本中的函数多次返回
【发布时间】:2013-01-30 22:18:45
【问题描述】:
function get_arguments()
{
    read -p 'data : ' data
    read -p 'lambda: ' lambda
    echo $data $lambda 

}


 data,lambda=$(get_arguments)

但是我遇到了一个错误

data :  /home/wolfman/Downloads/data
lambda value: 2
./shell_script.sh: line 25: data,lambda,= /home/wolfman/Downloads/data: No such file or directory

但是

1) 为什么它还要评估那个文件是否存在......它只是一个字符串??

2) 我做错了什么:(

谢谢

【问题讨论】:

    标签: shell unix


    【解决方案1】:

    sh 语法不允许这样做。但是,函数中的变量是全局的,所以你可以直接调用函数,datalambda会在调用者中设置。

    函数返回一个整数值,但它们可以打印调用者可以读取的任意数据。例如,您可以这样做:

    get_arguments | { read data lambda; echo $data $lambda; }
    

    缺点是这些值仅在该块中可用。 (管道创建一个子shell,read 读取的值只在该子shell 中有效。)

    【讨论】:

      【解决方案2】:

      为了好玩,这里还有其他几种可能的方法。

      read -r data lambda <<< $(get_arguments)
      

      set -- $(get_arguments)
      data=$1
      lambda=$2
      

      【讨论】:

        【解决方案3】:

        shell 不允许直接分配给变量列表,您可以通过 shell 字符串解析(或可能的其他方法)来管理它。试试

        data_lambda=$(get_arguments)
        data=${data_lambda% *}
        #-----------------^^space char
        lambda=${data_lambda#* }
        #------------------^^space char
        
        
        $d=123 l=345
        $data_lambda=$(echo $d $l)
        $echo $data_lambda
        123 345
        $data=${data_lambda% *}
        $lambda=${data_lambda#* }
        $echo $data
        123
        $echo $lambda
        345
        

        $(echo $d $l) 替换 data_lambda=$(get_arguments)`。

        查看我在 shell parameter modifiers 上的文章

        IHTH

        【讨论】:

        • @shelter:嗨..你确定是这样..我试过这个..但是 lamda 是我在数据变量中得到的??
        • 错字,s/lamba/lamdba/g 现已修复。
        猜你喜欢
        • 2017-10-02
        • 2013-07-16
        • 2016-03-14
        • 1970-01-01
        • 2021-02-23
        • 1970-01-01
        • 1970-01-01
        • 2014-05-25
        • 2016-10-18
        相关资源
        最近更新 更多