In /usr/bin/mkcamlp5 line 4: OLIB=`ocamlc -where` ^-------------^ SC2006: Use $(...) notation instead of legacy backticked `...`. Did you mean: OLIB=$(ocamlc -where) In /usr/bin/mkcamlp5 line 28: j=`basename $1 .cmi` ^----------------^ SC2006: Use $(...) notation instead of legacy backticked `...`. ^-- SC2086: Double quote to prevent globbing and word splitting. Did you mean: j=$(basename "$1" .cmi) In /usr/bin/mkcamlp5 line 30: first="`expr "$j" : '\(.\)' | tr 'a-z' 'A-Z'`" ^-- SC2006: Use $(...) notation instead of legacy backticked `...`. ^---^ SC2018: Use '[:lower:]' to support accents and foreign alphabets. ^---^ SC2019: Use '[:upper:]' to support accents and foreign alphabets. Did you mean: first="$(expr "$j" : '\(.\)' | tr 'a-z' 'A-Z')" In /usr/bin/mkcamlp5 line 31: rest="`expr "$j" : '.\(.*\)'`" ^---------------------^ SC2006: Use $(...) notation instead of legacy backticked `...`. Did you mean: rest="$(expr "$j" : '.\(.*\)')" In /usr/bin/mkcamlp5 line 43: $OLIB/extract_crc -I $OLIB $INCL $INTERFACES > $CRC.ml ^---^ SC2086: Double quote to prevent globbing and word splitting. ^---^ SC2086: Double quote to prevent globbing and word splitting. ^---^ SC2086: Double quote to prevent globbing and word splitting. ^---------^ SC2086: Double quote to prevent globbing and word splitting. Did you mean: "$OLIB"/extract_crc -I "$OLIB" "$INCL" "$INTERFACES" > $CRC.ml In /usr/bin/mkcamlp5 line 45: ocamlc -I $LIB odyl.cma camlp5.cma $CRC.ml $INCL $OPTS odyl.cmo -linkall ^---^ SC2086: Double quote to prevent globbing and word splitting. ^---^ SC2086: Double quote to prevent globbing and word splitting. Did you mean: ocamlc -I $LIB odyl.cma camlp5.cma $CRC.ml "$INCL" "$OPTS" odyl.cmo -linkall For more information: https://www.shellcheck.net/wiki/SC2018 -- Use '[:lower:]' to support accent... https://www.shellcheck.net/wiki/SC2019 -- Use '[:upper:]' to support accent... https://www.shellcheck.net/wiki/SC2086 -- Double quote to prevent globbing ...