2 # Desc: Get timestamp in nanoseconds 
   4 yell
() { echo "$0: $*" >&2; }      #o Yell, Die, Try Three-Fingered Claw technique 
   5 die
() { yell 
"$*"; exit 111; }     #o Ref/Attrib: https://stackoverflow.com/a/25515370 
   6 try
() { "$@" || die 
"cannot $*"; } #o 
   8     # Desc: Get epoch nanoseconds 
  11     # Input: arg1: 'date'-parsable timestamp string (optional) 
  12     # Output: Nanoseconds since 1970-01-01 
  13     # Depends: date 8, cut 8, yell() 
  14     # Ref/Attrib: Force base 10 Bash arith with '10#'. https://stackoverflow.com/a/24777667 
  15     local argTime timeCurrent timeInput timeEpochFloat timeEpochInt
 
  16     local timeEpochNsFrac timeEpochNs
 
  21     timeCurrent
="$(date --iso-8601=ns)"; # Produce `date`-parsable current timestamp with resolution of 1 nanosecond. 
  23     # Decide to parse current or supplied time 
  24     ## Check if time argument empty 
  25     if [[ -z "$argTime" ]]; then 
  26         ## T: Time argument empty, use current time 
  27         timeInput
="$timeCurrent"; 
  29         ## F: Time argument exists, validate time 
  30         if date --date="$argTime" 1>/dev
/null 
2>&1; then 
  31             ### T: Time argument is valid; use it 
  34             ### F: Time argument not valid; exit 
  35             yell 
"ERROR:Invalid time argument supplied. Exiting."; exit 1; 
  38     # Construct and deliver nanoseconds since 1970-01-01     
  39     timeEpochFloat
="$(date --date="$timeInput" +%s.%N)"; # Save ssss.NNNNNNNNN 
  40     timeEpochInt
="$(echo "$timeEpochFloat" | cut -d. -f1)"; # Get ssss 
  41     timeEpochNsFrac
="$(echo "$timeEpochFloat" | cut -d. -f2)"; # Get NNNNNNNNN 
  42     timeEpochNs
="$(( (10#"$timeEpochInt" * 10**9) + (10#"$timeEpochNsFrac") ))"; 
  44 } # Nanoseconds since 1970-01-01 
  46 #==BEGIN sample code== 
  47 echo "It's been $(timeEpochNS) nanoseconds since 1970-01-01."; 
  48 echo "It's been $(timeEpochNS "10 years ago
") nanoseconds since 10 years ago."; 
  49 echo "It's been $(timeEpochNS "2003-02-01T08:59:15-05:00") nanoseconds since contact lost with STS-107."; 
  52 # Author: Steven Baltakatei Sandoval