"${my_array[@]/#/-}"의 /#/-는 어떤 유형의 작업인가요?

"${my_array[@]/#/-}"의 /#/-는 어떤 유형의 작업인가요?

수락된 답변배열을 명령 인수로 변환하시겠습니까?다음 Bash 명령을 사용하십시오.

command "${my_array[@]/#/-}" "$1"

이 부분이 정확히 어떤 역할을 하는지 알아보려고 합니다 /#/-. 안타깝게도 이를 무엇이라고 불러야 할지 모르기 때문에 문서를 찾는 데 어려움을 겪고 있습니다. 배열과 일부 웹사이트에 대한 Bash 매뉴얼 페이지 섹션을 살펴봤지만 아무것도 찾을 수 없었습니다.

답변1

패턴 대체의 예입니다.쉘 매개변수 확장: ${parameter/pattern/replacement}확장하여 ${parameter}첫 번째 인스턴스를 . 이 패턴의 맥락에서 는 특별합니다. 패턴을 인수의 시작 부분에 고정합니다. 이 모든 것의 최종 결과는 배열의 모든 값을 확장하고 각 값 앞에 추가하는 것입니다(각 매개변수의 시작 부분에 있는 빈 패턴을 대체하여).patternreplacement#my_array-

답변2

네, 패턴 교체입니다쉘 매개변수 확장처럼:

${parameter/pattern/replacement}

단, 첫 번째 문자 다음의 첫 번째 문자가 /또는 /이면 (반복) 합계라는 특별한 의미를 #갖습니다 .%allstartend

그리고:

$ 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

관련 정보