배열을 명령의 인수 로 변환하는 것에 대한 대답은 무엇입니까? 다음 Bash 명령을 사용합니다.
command "${my_array[@]/#/-}" "$1"
나는 그 /#/-
부분이 정확히 무엇을하는지 알아 내려고 노력하고 있습니다. 불행히도, 나는 그것을 무엇이라고 부를 지 모르므로 문서를 찾는 데 어려움을 겪고 있습니다. 배열 및 일부 웹 사이트의 Bash 매뉴얼 페이지 섹션을 살펴 보았지만 아무것도 찾을 수 없습니다.
배열을 명령의 인수 로 변환하는 것에 대한 대답은 무엇입니까? 다음 Bash 명령을 사용합니다.
command "${my_array[@]/#/-}" "$1"
나는 그 /#/-
부분이 정확히 무엇을하는지 알아 내려고 노력하고 있습니다. 불행히도, 나는 그것을 무엇이라고 부를 지 모르므로 문서를 찾는 데 어려움을 겪고 있습니다. 배열 및 일부 웹 사이트의 Bash 매뉴얼 페이지 섹션을 살펴 보았지만 아무것도 찾을 수 없습니다.
답변:
이것은 쉘 매개 변수 확장 에서 패턴 교체의 인스턴스입니다 . ${parameter/pattern/replacement}
확장 ${parameter}
하여 첫 번째 인스턴스를 pattern
로 바꿉니다 replacement
. 이런 종류의 패턴과 관련하여 #
특별합니다. 패턴을 매개 변수의 시작 부분에 고정시킵니다. 이 모든 결과의 결과 는 각 매개 변수의 시작 부분에 빈 패턴을 대체하여 각 값 my_array
앞에 배열의 모든 값을 확장하는 것 -
입니다.
예, 쉘 매개 변수 확장 에서 다음과 같은 패턴 대체입니다 .
${parameter/pattern/replacement}
그러나 첫 번째 이후의 첫 번째 문자 /
가 /
또는 #
또는 (반복) %
이라는 특별한 의미를 갖는 경우 및 .all
start
end
와:
$ str='one_#two_two_three_one'
단일 /
인스턴스가 첫 번째 인스턴스를 대체합니다. 의 첫 번째 인스턴스 one
:
$ echo "${str/one/x-x}"
x-x_#two_two_three_one
또는 첫 번째 경우 two
:
$ echo "${str/two/x-x}"
one_#x-x_two_three_one
one
끝에 인스턴스 :
$ echo "${str/%one/x-x}"
one_#two_two_three_x-x
의 모든 반복 two
:
$ echo "${str//two/x-x}"
one_#x-x_x-x_three_one
one
시작시 의 인스턴스 :
$ echo "${str/#one/x-x}"
x-x_#two_two_three_one
로 시작하는 문자열 #
(인용 부호 #
) :
$ echo "${str/\#two/x-x}"
one_x-x_two_three_one
그러나 # (인용되지 않은)을 그대로두면 변수의 시작 부분에 대체가 설정됩니다.
$ echo "${str/#/====}"
====one_#two_two_three_one
또한 매개 변수가 배열이면 모든 요소에서 대체가 수행됩니다.
$ str=( one two three )
$ echo "${str[@]/#/==}"
==one ==two ==three
#
하고%
하면서 패턴의 일부//
는 다른 연산자/
와 동일한 패턴을 사용한다. 당신은pattern='#x'; echo "${var/$pattern}"
(또는${var//$pattern}
) 가질 수 있지만pattern=/x; echo "${var/$pattern}"
와는 다릅니다echo "${var//x}"
. 주의#
와%
의 결합 될 수zsh
있지만bash
나ksh
.