関数に複数の引数を渡そうとしていますが、そのうちの1つは2つの単語で構成されており、シェル関数で1つの引数として処理する必要があります。
args=("$@")
function(){
echo ${args[0]}
echo ${args[1]}
echo ${args[2]}
}
このコマンドを呼び出すとsh Shell hi hello guys bye
私はこれを手に入れます
hi
hello
guys
しかし、私が本当に欲しいのは:
hi
hello guys
bye
2番目の引数を引用するだけです。
myfunc(){
echo "$1"
echo "$2"
echo "$3"
}
myfunc hi "hello guys" bye
シェルから何かを呼び出すのと同じです(シェルスクリプト、Cプログラム、a python program、…))
Unixシェルから呼び出し、パラメータにスペースがある場合は、引用符で囲む必要があります。
sh my-Shell-script hi "hello guys" bye
一重引用符を使用することもできます。これらはより強力です。シェルが何かを解釈しないようにします($
、!
、\
、*
、"
など、'
を除く)
sh my-Shell-script hi 'hello guys' bye
また、関数内で使用するすべての変数を引用する必要があります。
あなたの例では、関数に到達する前に引数がばらばらになっていることに注意してください(スクリプトに渡されるため)。
#!/bin/sh
my_procedure{
echo "$1"
echo "$2"
echo "$3"
}
my_procedure("$@")
スクリプトでどのスペースがどの(どの単語が一緒になっている)かを知る方法がないため、スクリプトでそれを自動的に行う方法はありません。