Bash関数でスペースを持つパラメータを解析する方法

Bash関数でスペースを持つパラメータを解析する方法

Bashは次の関数を呼び出します。

myFunction "1 2"
myFunction()
{
        echo "$1"
        echo "$2"
}

これにより、「1 2」と空白の行が印刷されます。ある行1と別の行2に印刷されるようにパラメータをどのように解析しますか?myFunction "1" "2" パラメータが別の変数に保存されているため呼び出すことはできません

ベストアンサー1

関数が受け取る最初の引数を空白文字に分割したいようです。これを行うには、スペースを区切り文字として使用するように分割を構成し、glob部分を無効にしてから、分割+glob演算子を使用できます。

myfunction() {
  local -       # make changes to options local to the function.
                # needs bash 4.4 or newer.
  local IFS=' ' # split on space only
  set -o noglob # disable glob part
  set -- $1     # split+glob invoked on $1 by leaving that $1 unquoted,
                # result stored in $1, $2... using set --
  printf '%s\n' "$1"
  printf '%s\n' "$2"
}
myfunction "1 2"

おすすめ記事