#==BEGIN Define script parameters==
#===BEGIN Define variables===
:
+declare -ag arrayPosArgs
#===END Define variables===
#===BEGIN Declare local script functions===
# Input: arg1: string
# vars: opVerbose
# Output: stderr
- # Depends: bash 5.0.3, GNU-coreutils 8.30 (echo, date)
+ # Depends: bash 5.1.16, GNU-coreutils 8.30 (echo, date)
if [ "$opVerbose" = "true" ]; then
functionTime="$(date --iso-8601=ns)"; # Save current time in nano seconds.
showUsage() {
# Desc: Display script usage information
# Usage: showUsage
- # Version 0.0.1
+ # Version 0.0.2
# Input: none
# Output: stdout
# Depends: GNU-coreutils 8.30 (cat)
-I, --input-dir
Define input directory path.
-o, --output-file
- Define output file path
+ Define output file path.
-O, --output-dir
- Define output directory path
+ Define output directory path.
+ --
+ Indicate end of options.
EXAMPLE:
bktemp-processArgs -o foo.txt
+ bktemp-processArgs -o foo.txt -- some_file.txt
EOF
} # Display information on how to use this script.
showVersion() {
# Desc: Displays script version and license information.
# Usage: showVersion
- # Version: 0.0.1
+ # Version: 0.0.2
# Input: scriptVersion var containing version string
# Output: stdout
# Depends: vbm(), yell, GNU-coreutils 8.30
vbm "DEBUG:showVersion function called."
cat <<'EOF'
-bktemp-processArgs 0.0.1
+bktemp-processArgs 1.0.0
Copyright (C) 2021 Steven Baltakatei Sandoval
License GPLv3: GNU GPL version 3
This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
- GNU Coreutils 8.30
- Copyright (C) 2018 Free Software Foundation, Inc.
+ GNU Coreutils 8.32
+ Copyright (C) 2020 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
processArgs() {
# Desc: Processes arguments provided to script.
# Usage: processArgs "$@"
- # Version: 0.0.1
+ # Version: 1.0.0
# Input: "$@" (list of arguments provided to the function)
# Output: Sets following variables used by other functions:
# opVerbose Indicates verbose mode enable status. (ex: "true", "false")
# pathFileOut1 Path to output file.
# pathDirIn1 Path to input directory.
# pathFileIn1 Path to input file.
- # opFileOut1_overwrite Indicates whether file pathFileOut1 should be overwritten (ex: "true", "false')
+ # opFileOut1_overwrite Indicates whether file pathFileOut1 should be overwritten (ex: "true", "false").
+ # arrayPosArgs Array of remaining positional argments
# Depends:
# yell() Displays messages to stderr.
# vbm() Displays messsages to stderr if opVerbose set to "true".
- # showUsage() Displays usage information about parent script
- # showVersion() Displays version about parent script
- # External dependencies: bash (5.0.3), echo
+ # showUsage() Displays usage information about parent script.
+ # showVersion() Displays version about parent script.
+ # arrayPosArgs Global array for storing non-option positional arguments (i.e. arguments following the `--` option).
+ # External dependencies: bash (5.1.16), echo
# Ref./Attrib.:
# [1]: Marco Aurelio (2014-05-08). "echo that outputs to stderr". https://stackoverflow.com/a/23550347
+ # [2]: "Handling positional parameters" (2018-05-12). https://wiki.bash-hackers.org/scripting/posparams
# Initialize function
vbm "DEBUG:processArgs function called."
yell "ERROR:Specified output directory is not valid:""$2";
yell "Exiting.";
exit 1;
- fi ;;
- *) yell "ERROR: Unrecognized argument."; exit 1;; # Handle unrecognized options. See [1].
+ fi ;;
+ --) # End of all options. See [2].
+ shift;
+ for arg in "$@"; do
+ vbm "DEBUG:adding to arrayPosArgs:$arg";
+ arrayPosArgs+=("$arg");
+ done;
+ break;;
+ -*) showUsage; yell "ERROR: Unrecognized option."; exit 1;; # Display usage
+ *) showUsage; yell "ERROR: Unrecognized argument."; exit 1;; # Handle unrecognized options. See [1].
esac
shift
done
#==BEGIN sample code==
processArgs "$@";
yell "DEBUG:Provided arguments..:""$*"
-yell "DEBUG:opVerbose...........:$opVerbose";
-yell "DEBUG:pathDirOut1.........:$pathDirOut1";
-yell "DEBUG:pathFileOut1........:$pathFileOut1";
-yell "DEBUG:pathDirIn1..........:$pathDirIn1";
-yell "DEBUG:pathFileIn1.........:$pathFileIn1";
-yell "DEBUG:opFileOut1_overwrite:$opFileOut1_overwrite";
+yell "DEBUG:opVerbose...........:${opVerbose:-<unset>}";
+yell "DEBUG:pathDirOut1.........:${pathDirOut1:-<unset>}";
+yell "DEBUG:pathFileOut1........:${pathFileOut1:-<unset>}";
+yell "DEBUG:pathDirIn1..........:${pathDirIn1:-<unset>}";
+yell "DEBUG:pathFileIn1.........:${pathFileIn1:-<unset>}";
+yell "DEBUG:opFileOut1_overwrite:${opFileOut1_overwrite:-<unset>}";
+yell "DEBUG:arrayPosArgs........:$(if [[ -v arrayPosArgs ]]; then declare -p arrayPosArgs; else printf "<unset>"; fi )";
+#yell "DEBUG:arrayPosArgs........:${arrayPosArgs[*]}";
#==END sample code==
# Author: Steven Baltaktei Sandoval