find
파일 이름 접미사를 포함하는 배열을 구성하여 호출 하고 있습니다 isufx
.
그러므로 나는
echo "isufx: ${isufx[*]}"
이로 인해
-name *.texi -o -name *.org -o
마지막으로 배열의 마지막 요소(-o)를 제거하여 find
.
find "$fdir" "${isufx[@]}"
배열 인덱스가 0에서 시작하지 않는 경우 더 안정적인 마지막 요소를 제거하는 데 어떤 기술이 사용되는지 묻습니다.
답변1
최신 버전 bash
(4.3 이상)을 사용하면 다음을 수행할 수 있습니다.
unset 'array[-1]'
예를 들어, 가장 높은 인덱스를 가진 요소를 설정 해제합니다 zsh
.
$ bash -c 'a[3]=1 a[12]=2; a[123123]=3; typeset -p a; unset "a[-1]"; typeset -p a'
declare -a a=([3]="1" [12]="2" [123123]="3")
declare -a a=([3]="1" [12]="2")
ksh93t부터 이는 ksh93에도 적용됩니다.
[...]
Bourne 스타일 쉘의 glob 연산자와 마찬가지로 따옴표가 필요합니다 . array1
예를 들어, 현재 디렉터리에 호출된 파일이 있으면 인용되지 않은 파일은 array[-1]
으로 확장되고 array1
, 그렇지 않으면 null로 확장되거나 array[-1]
쉘 및 glob 옵션 설정에 따라 오류가 발생합니다.
(배열이 ksh/bash의 희소 배열이 아닌 일반 배열인 경우 ) 다음을 zsh
제외하고 unset 'array[-1]'
다음을 수행할 수 있습니다 .
array[-1]=()
(ksh와의 호환성을 어느 정도 유지하기 위해 요소를 설정 해제하고 그 뒤에 요소를 이동하는 것과 동일하며, unset
마지막 요소가 아닌 경우 빈 문자열로 요소를 설정합니다.)
In yash
(일반 배열에서도 작동):
array -d array -1
In fish
(일반 배열에서도 작동):
set -e array[-1]
in csh
(일반 배열에서도 작동하며 배열을 지원하는 최초의 셸(70년대 후반 이후!)):
set array[$#array] =
답변2
배열 슬라이싱을 사용하여 마지막 요소를 제외한 모든 요소를 가져올 수 있습니다.
find "$fdir" "${isufx[@]:0:${#isufx[@]}-1}"
설명: ${#isufx[@]}
배열의 요소 수를 가져옵니다. :0:numelements-1
배열 확장에 추가하면 #0...부터 시작하여 마지막 요소를 제외한 모든 요소를 numelements-1개로 가져옵니다.
배열을 약간 다르게 구성하여 단순화할 수도 있습니다. 추가 항목을 -o
시작 부분에 배치하고(예: 각 접미사에 대해 대신 추가 "-o" "-name" "*.$suffix"
) "-name" "*.$suffix" "-o"
요소 "${isufx[@]:1}"
#1부터 시작합니다(#0 건너뛰기).