関数のパラメータ伝達
1610 ワード
2018年6月11日月曜日
10:14
勉強を続けて、スクリプトを書くとき、伝達パラメータに問題が発生して、主に数の上で、もちろん、私はいくつかの穴を掘ってテストをしました......
走ってみると違いがわかります.
このコマンドを実行します.
もし私が引用符をつけたらどんな結果になりますか?1?
次のように変更します.
実行結果:
パラメータが関数に渡される場合、
引用符または単一引用符を使用しない場合、パラメータの個数を正しく取得できません.
1.shell十三問?;
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十三問?;