関数のパラメータ伝達

1610 ワード

2018年6月11日月曜日
10:14

リード


勉強を続けて、スクリプトを書くとき、伝達パラメータに問題が発生して、主に数の上で、もちろん、私はいくつかの穴を掘ってテストをしました......

ぶんせき


引用符と二重引用符がありません


走ってみると違いがわかります.

#!/bin/bash

test_fun() {

    echo "$#"

}

echo "no quote"

echo 'the number of parameter in "$@" is '$(test_fun $@)

echo 'the number of parameter in "$*" is '$(test_fun $*)

echo "double quotes"

echo 'the number of parameter in "$@" is '$(test_fun "$@")

echo 'the number of parameter in "$*" is '$(test_fun "$*")


このコマンドを実行します.

./test.sh test1 "tes t2" 'test3 test4'

the number of parameter in "$@" is 5

the number of parameter in "$*" is 5

the number of parameter in "$@" is 3

the number of parameter in "$*" is 1


疑問


もし私が引用符をつけたらどんな結果になりますか?1?

一重引用符


次のように変更します.

echo "single quote"

echo 'the number of parameter in "$@" is '$(test_fun '$@')

echo 'the number of parameter in "$*" is '$(test_fun '$*')


実行結果:

./test.sh test1 "tes t2" 'test3 test4'

the number of parameter in "$@" is 1

the number of parameter in "$*" is 1


結論


パラメータが関数に渡される場合、"$@"を使用することが望ましい.なぜなら、テスト中にこの方法だけが正しいからである.
引用符または単一引用符を使用しない場合、パラメータの個数を正しく取得できません.

リファレンス


1.shell十三問?;