2016-11-14 9 views
1

私はbashを学んでいます。 今私は関数に空の配列を与えたいと思います。ただし、動作しません。引用変数は、私たちは空の変数は、以下のような を与えることができ、私の理解では、次のように出力は以下の通りです空の配列をbashでどのように機能させるか?

function display_empty_array_func() { 
    local -a aug1=$1 
    local -a aug2=${2:-no input} 
    echo "array aug1 = ${aug1[@]}" 
    echo "array aug2 = ${aug2[@]}" 
} 

declare -a empty_array=() 

display_empty_array_func "${empty_array[@]}" "1" 

array aug1 = 1 # I expected it is empty 
array aug2 = no input # I expected it is 1 

を参照してください、

function display_empty_variable_func() { 
    local aug1=$1 
    local aug2=${2:-no input} 
    echo "variable aug1 = ${aug1}" 
    echo "variable aug2 = ${aug2}" 
} 

display_empty_variable_func "" "1" 

としてください出力は次のとおりです。

variable aug1 = # it is empty as expected 
variable aug2 = 1 # it is 1 as expected 

空の配列を渡す際に何が問題になるかわかりません。 メカニズムや解決方法を知っている人。私にそれを知らせてください。 ありがとうございます。

+2

これは役立つかもしれない:https://stackoverflow.com/questions/16461656/bash-how-to-pass-array-as-an-argument-to-a-function – Sundeep

答えて

0

enter image description here位置パラメータが空の場合、シェルスクリプト&シェル関数はその値を考慮せず、その値(位置パラメータ値)として次の空でない値をとります。 空の値を取りたい場合は、その値を引用符で囲む必要があります。

Ex: I'm having small script like 
cat test_1.sh 
#!/bin/bash 

echo "First Parameter is :"$1; 

echo "Second Parameter is :"$2; 

case -1 
If i executed this script as 
sh test_1.sh 

First Parameter is : 

Second Parameter is : 

Above two lines are empty because i have not given positional parameter values to script. 

case-2 
If i executed this script as 
sh test_1.sh 1 2 

First Parameter is :1 

Second Parameter is :2 

case-2 
If i executed this script as 
sh test_1.sh 2 **# here i given two spaces in between .sh and 2 and i thought 1st param is space and second param is 2 but** 

First Parameter is :2 

Second Parameter is : 

The output looks like above. My first statement will apply here. 

case-4 
If i executed this script as 
sh test_1.sh " " 2 

First Parameter is : 

Second Parameter is :2 

Here i kept space in quotes. Now i'm able to access the space value. 

**This will be help full for you. But for your requirement please use below code.** 

In this you have **quote** the space value(""${empty_array[@]}"") which is coming from **an empty array**("${empty_array[@]}"). So you have to use additional quote to an empty array. 

function display_empty_array_func() { 
    local -a aug1=$1 
    local -a aug2=${2:-no input} 
    echo "array aug1 = ${aug1[@]}" 
    echo "array aug2 = ${aug2[@]}" 
} 

declare -a empty_array=() 

display_empty_array_func ""${empty_array[@]}"" "1" 

The output is: 
array aug1 = 
array aug2 = 1 
+0

は答えてくれてありがとう。あなたのサンプルをコピーしてテストしましたが、結果は変わりませんでした。どのようにコードを実行しましたか?どうもありがとうございました。 – mora

+0

私は説明したように働いています。あなたのref PFAのスクリーンショット。 – learner

+0

再度お返事ありがとうございます。私の環境ではまだ動作しません。 GNU bash、バージョン4.3.42。しかし、この質問にはもう気にしないでください。サンデップが上記で推奨した他のサイトを紹介しました。 – mora

関連する問題