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)我做错了什么:(
感谢
答案 0 :(得分:2)
sh
语法不允许这样做。但是,函数中的变量是全局变量,因此您可以只调用该函数,并在调用者中设置data
和lambda
。
函数返回一个整数值,但它们可以打印调用者可以读取的任意数据。例如,你可以这样做:
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)`。
IHTH
答案 2 :(得分:1)
这里有一些其他可能的方法。
read -r data lambda <<< $(get_arguments)
或
set -- $(get_arguments)
data=$1
lambda=$2