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

谢谢

4

3 回答 3

2

sh语法不允许这样做。但是,函数中的变量是全局的,所以你可以只调用函数,data并且lambda将在调用者中设置。

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

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

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

于 2013-01-30T22:21:52.623 回答
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 参数修饰符的文章

IHTH

于 2013-01-30T22:23:35.093 回答
1

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

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

或者

set -- $(get_arguments)
data=$1
lambda=$2
于 2013-01-30T23:13:43.870 回答