수락된 답변배열을 명령 인수로 변환하시겠습니까?다음 Bash 명령을 사용하십시오.
command "${my_array[@]/#/-}" "$1"
이 부분이 정확히 어떤 역할을 하는지 알아보려고 합니다 /#/-
. 안타깝게도 이를 무엇이라고 불러야 할지 모르기 때문에 문서를 찾는 데 어려움을 겪고 있습니다. 배열과 일부 웹사이트에 대한 Bash 매뉴얼 페이지 섹션을 살펴봤지만 아무것도 찾을 수 없었습니다.
답변1
패턴 대체의 예입니다.쉘 매개변수 확장: ${parameter/pattern/replacement}
확장하여 ${parameter}
첫 번째 인스턴스를 . 이 패턴의 맥락에서 는 특별합니다. 패턴을 인수의 시작 부분에 고정합니다. 이 모든 것의 최종 결과는 배열의 모든 값을 확장하고 각 값 앞에 추가하는 것입니다(각 매개변수의 시작 부분에 있는 빈 패턴을 대체하여).pattern
replacement
#
my_array
-
답변2
네, 패턴 교체입니다쉘 매개변수 확장처럼:
${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