Bash 대체 항목을 함수 인수로 제공

Bash 대체 항목을 함수 인수로 제공

잘 작동하는 다음 루프가 있습니다.

function uppercase_all_letters() {
  for filename in *;
    do echo "${filename^^}";
  done;
}

"${filename^^}"함수에 매개변수로 제공하는 방법은 무엇입니까 ?

SUBSTITUTION="${filename^^}"평소대로 ( )를 시도했지만 Bash는 다음과 같이 보고했습니다.

./test.sh: line 26: ${filename^^}: bad substitution

답변1

문자 그대로 이를 수행하려면 eval에 의존해야 할 수도 있습니다.

function subst_all_filenames() {
    subst="$1"
    for filename in *
    do
        eval 'echo ${filename'"$subst"'}'
    done
}

subst_all_filenames "^^"
subst_all_filenames ",,"
subst_all_filenames ""

또는 알려진 대체 목록만 지원됩니다.

function subst_all_filenames() {
    case "$1" in
      ^^) for filename in *; do echo "${filename^^}"; done ;;
      ,,) for filename in *; do echo "${filename,,}"; done ;;
       *) printf "%s\n" * ;;
    esac
}

때로는 그러한 도우미 기능이 필요하지 않은 경우도 있습니다. 쉘 스크립트의 모든 곳에 이와 같은 루프가 있는 것은 정상입니다.

관련 정보