(bash) 스크립트 사이에 공백이있는 인수 전달


93

다음 bash 두 개의 스크립트가 있습니다.

금연 건강 증진 협회:

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

b.sh :

#!/bin/bash
someApp $*

someApp 바이너리는 $*1 대신 2 개의 인수 ( 'My'및 'Argument')를받습니다.

몇 가지를 테스트했습니다.

  • b.sh예상대로 작동을 통해서만 someApp 실행
  • b.sh예상대로 작동 하는 인수 반복 + 에코
  • $@대신 사용 $*하면 차이가 없습니다.

6
시도 someApp "$*"또는someApp "$@"
러셀 UHL에게

1
Yupp-매력처럼 작동합니다!
John Fear

답변:


147

$*, 인용되지 않음, 두 단어로 확장됩니다. someApp단일 인수 를 받도록 인용해야합니다 .

someApp "$*"

$@대신 사용할 수 있으므로 someApp다음 b.sh과 같이 호출하면 두 개의 인수가 수신 됩니다.

b.sh 'My first' 'My second'

someApp "$*", someApp하나의 인자를받을 것이다 My first My second. 으로는 someApp "$@", someApp두 개의 인수를받을 것 My first하고 My second.


24
놓치기 쉬운 핵심은 "$ @"를 인용해야한다는 것입니다. $ @로는 충분하지 않습니다.
miracle2k 2014-06-21

1
@ miracle2k 맞습니다. 인용되지 $@않고 $*동일하게 작동합니다.
chepner 14

2
@Matt 그것은 완전히 다른 것입니다. "$ @"는 각 인수를 개별적으로 인용한다는 점에서 특별합니다. 따라서 둘 이상의 인수가 발생할 수 있습니다. "$ something"은 $ something이 확장되는 모든 부분을 따옴표로 묶은 것이며 항상 단일 인수가됩니다.
Carlo Wood

대답은 내가 설정 한 경우에만 작동합니다 IFS=$'\n'. 이유를 모르겠습니다.
Dominic M
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.