#!/usr/bin/env bash roll_dice() { local diceString="${1,,}" local modifier="${2:-0}" local number local sides if [[ "${diceString}" != "${diceString//d/}" ]]; then IFS='d' read -r number sides <<< "$diceString" fi if [[ "${diceString:0:1}" == "d" ]]; then number=1 sides="${diceString//d/}" fi number=${number:-1} sides=${sides:-6} if [[ "$modifier" =~ ^[+-]?[0-9]+$ ]]; then modifier=$((modifier)) fi randomNumbers=$(shuf -i 1-$sides -n $number | tr '\n' ' ') IFS=' ' read -r -a numbersArray <<< "$randomNumbers" joinedNumbers=$(IFS=,; echo "${numbersArray[*]}") sum=0 for num in "${numbersArray[@]}"; do sum=$((sum + num)) done sum=$((sum + modifier)) echo "Dice rolls: $joinedNumbers Modifier: $modifier" echo "Total: $sum" } roll_dice "$1" "$2"