うまく動作する次のループがあります。
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
}
時にはそのようなヘルパー機能が必要ない場合もあります。シェルスクリプトのどこにもこのようなループがあるのは正常です。