잘 작동하는 다음 루프가 있습니다.
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
}
때로는 그러한 도우미 기능이 필요하지 않은 경우도 있습니다. 쉘 스크립트의 모든 곳에 이와 같은 루프가 있는 것은 정상입니다.