1. ホーム
  2. bash

[解決済み] スペースで区切られた引数の受け渡し (bash) スクリプト

2022-12-19 12:09:24

質問

次のようなbashの2つのスクリプトを持っています。

a.sh:

#!/bin/bash
./b.sh 'My Argument'

b.sh:

#!/bin/bash
someApp $*

someAppのバイナリが受け取る $* を1つではなく2つの引数('My'と'Argument')として受け取ります。

いくつかテストしてみたのですが

  • someApp をスルーで実行する b.sh は期待通りに動作する
  • の引数をイテレートしてエコーする。 b.sh は期待通りに動作する
  • 使用方法 $@ の代わりに $* であっても違いはありません。

どのように解決するのですか?

$* のように、引用符で囲まれていない場合は、2つの単語に展開されます。あなたはそれを引用する必要があります。 someApp が一つの引数を受け取るように引用する必要があります。

someApp "$*"

を使いたい場合があります。 $@ を使いたい場合もあるでしょうから、その場合は someApp を呼び出すと、2 つの引数を受け取ります。 b.sh として

b.sh 'My first' 'My second'

とは someApp "$*" , someApp は単一の引数 My first My second . とは someApp "$@" , someApp は二つの引数を受け取ることになります。 My firstMy second .