D1529.test-keyword-funcdef.sh (671B)
1 #!/bin/bash 2 3 keywords=('[[' 'time' '!' 'if' 'while' 'until' 'for' 'select' 'case' 4 '{' 'then' 'elif' 'else' 'do' '}' 'done' 'fi' 'esac' 5 'coproc' 'function') 6 builtins=('declare' 'readonly' 'typeset' 'local' 'export' 'alias' 7 'eval') 8 9 for word in "${keywords[@]}" "${builtins[@]}"; do 10 if (eval "$word () { :; }" 2>/dev/null); then 11 ok+=("$word") 12 else 13 ng+=("$word") 14 fi 15 done 16 17 echo "Can we define a function using 'NAME() { ... }' form with the NAME being keywords/builtins?" 18 echo "yes: ${ok[*]}" 19 echo "no: ${ng[*]}" 20 21 # 結論: builtin はできる。keyword はできない。当たり前といえば当たり前の結果である。