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構文はそれを許可しません。ただし、関数内の変数はグローバルであるため、関数を呼び出すだけdatalambda、呼び出し元に設定されます。

関数は整数値を返しますが、呼び出し元が読み取ることができる任意のデータを出力できます。たとえば、次のことができます。

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

欠点は、値がそのブロックでのみ使用できることです。(パイプはサブシェルを作成し、によって読み取られる値readはそのサブシェルでのみ有効です。)

于 2013-01-30T22:21:52.623 に答える
1

シェルでは変数のリストに直接割り当てることはできません。シェル文字列の解析(または場合によっては他の方法)でそれを管理できます。試す

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

data_lambda $(echo $d $l)= $(get_arguments)`の代わりに使用します。

シェルパラメータ修飾子に関する私の記事を参照してください

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 に答える