디렉토리의 하위 디렉토리 목록에서 작업하고 싶습니다. 치다:
for x in x86-headers/*/C/populate.sh; do echo $x; done
이것은 준다
x86-headers/elf/C/populate.sh
x86-headers/gl/C/populate.sh
x86-headers/gmp/C/populate.sh
x86-headers/gnome2/C/populate.sh
x86-headers/gtk2/C/populate.sh
x86-headers/jni/C/populate.sh
x86-headers/libc/C/populate.sh
그러나 나는 경로의 두 번째 부분에 해당하는, 즉 값 싶은
elf
, gl
등 나는 최고의 오프 제거하는 방법을 알고를 x86-headers
.
for x in x86-headers/*/C/populate.sh; do i=${x##x86-headers/}; echo $i; done
어느 것이
elf/C/populate.sh
gl/C/populate.sh
gmp/C/populate.sh
gnome2/C/populate.sh
gtk2/C/populate.sh
jni/C/populate.sh
libc/C/populate.sh
또한 경로에서 나중 용어를 제거하는 방법도 알고 있습니다. 즉 한 수준 아래로 내려갑니다.
cd x86-headers
for x in */C/populate.sh; do i=${x%%/*}; echo $i; done
준다
elf
gl
gmp
gnome2
gtk2
jni
libc
그러나 이것들을 결합하는 것은 효과가 없습니다. 즉
for x in x86-headers/*/C/populate.sh; do i=${${x##x86-headers}%%/*}; echo $i; done
준다
bash: ${${x##x86-headers}%%/*}: bad substitution
의심 할 여지없이 이것이 잘못된 구문이지만 올바른 구문을 모르겠습니다. 물론 더 좋은 방법이있을 수 있습니다. 파이썬을 사용하고 있다면 split on /
을 사용 하여 각 경로를 목록으로 나누고 두 번째 요소를 선택하지만 bash에서 어떻게 해야하는지 모르겠습니다.
편집 : 답변 주셔서 감사합니다. 나도 물었을 것입니다.이를 이식 가능하게 할 수 있습니까? 그렇다면 어떻게합니까?
i=${x#*/}; i=${i%%/*}
은 선택 사항입니다. 그렇습니까?