从shell脚本中的函数返回多个

时间:2013-01-30 22:18:46

标签: shell unix

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)我做错了什么:(

感谢

3 个答案:

答案 0 :(得分:2)

sh语法不允许这样做。但是,函数中的变量是全局变量,因此您可以只调用该函数,并在调用者中设置datalambda

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

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

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

这里有一些其他可能的方法。

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

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