이 기능 f()
은 매우 간단해야 아직이 이해할 수없는 방식으로 작동합니다호기심 배쉬 패턴 대체 동작
f() {
a=(cyan red green blue orange violet)
shopt -s extglob
echo 1: -${a[@]/!($1)}-
echo 2: -${a[@]/!($1)/}-
echo 3: -${a[@]/!("$1")/}-
echo 4: -"${a[@]/!($1)/}"-
echo 5: -${a[@]/!($1)/x}-
}
echo ORANGE
f orange # ends in e like blue
echo YELLOW
f yellow
출력은 (또한 빈/간격을 유의하시기 바랍니다)입니다 :
ORANGE
1: - e -
2: - e -
3: - e -
4: - e -
5: -x x x x xe x-
YELLOW
1: - -
2: - -
3: - -
4: - -
5: -x x x x x x-
왜 찾은 단어의 마지막 문자 만?!
(이 경우 orange
의 e
로) 예상 출력은 orange
보다는 e
주 : 나는 또한 내가 거기 한 빈 참조 어떤 장소에서 더 공백을 볼 기대 ..
는'shopt 내부 -s extglob' *이 함수 내부 * 작동하지 않습니다. extglob 다음에 오는 코드는 다르게 컴파일되며 함수는 선언 될 때 컴파일됩니다 (한 번). 런타임에'shopt'를하는 것은 너무 늦었습니다. 이것은 당신의 질문에 대한 대답이 아니지만 여전히 그 문제에 대해 의문을 품고 있습니다. – cdarke
@cdarke : 왜 내 코드가 작동 하나, shopt 행을 제거하면 더 이상 필요하지 않습니까? – choroba
흥미로운 Bash 버전을 사용하고 있습니까? – cdarke