Something went wrong. Try again.
extentions for bash language
Something went wrong. Try again.
9.6 kB · 522 lines
Shell
at main
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522#!/bin/bash
# String Module# Provides string manipulation, validation, and formatting utilities
module_version string 1.0.0
# String lengthstrlen() { local str="$1" echo "${#str}"}
length() { strlen "$@"}
# String manipulationsubstr() { local str="$1" local start="$2" local length="${3:-}" if [[ -n "$length" ]]; then echo "${str:$start:$length}" else echo "${str:$start}" fi}
substring() { substr "$@"}
# String concatenationconcat() { local result="" for str in "$@"; do result="${result}${str}" done echo "$result"}
# String repetitionrepeat_str() { local str="$1" local count="$2" local result="" for ((i=0; i<count; i++)); do result="${result}${str}" done echo "$result"}
repeat() { repeat_str "$@"}
# String case conversionto_upper() { local str="$1" echo "${str^^}"}
to_lower() { local str="$1" echo "${str,,}"}
capitalize() { to_upper "${1:0:1}${1:1}"}
to_title() { local str="$1" local result="" local prev_char=" " for ((i=0; i<${#str}; i++)); do local char="${str:$i:1}" if [[ "$prev_char" == " " ]]; then result="${result}${char^^}" else result="${result}${char,,}" fi prev_char="$char" done echo "$result"}
# String trimmingltrim() { local str="$1" echo "${str#"${str%%[![:space:]]*}"}"}
rtrim() { local str="$1" echo "${str%"${str##*[![:space:]]}"}"}
trim() { local str="$1" rtrim "$(ltrim "$str")"}
# String paddinglpad() { local str="$1" local length="$2" local pad_char="${3:- }" local str_len="${#str}" if [[ "$str_len" -ge "$length" ]]; then echo "$str" return fi local pad_len=$((length - str_len)) local padding=$(repeat_str "$pad_char" "$pad_len") echo "${padding}${str}"}
pad_left() { lpad "$@"}
rpad() { local str="$1" local length="$2" local pad_char="${3:- }" local str_len="${#str}" if [[ "$str_len" -ge "$length" ]]; then echo "$str" return fi local pad_len=$((length - str_len)) local padding=$(repeat_str "$pad_char" "$pad_len") echo "${str}${padding}"}
pad_right() { rpad "$@"}
# String search and replaceindexof() { local str="$1" local substr="$2" local start="${3:-0}" local search_str="${str:$start}" local pos="${search_str%%"$substr"*}" if [[ "$pos" == "$search_str" ]]; then echo "-1" else echo $((start + ${#pos})) fi}
contains() { local str="$1" local substr="$2" [[ "$str" == *"$substr"* ]]}
startswith() { local str="$1" local prefix="$2" [[ "$str" == "$prefix"* ]]}
starts_with() { startswith "$@"}
endswith() { local str="$1" local suffix="$2" [[ "$str" == *"$suffix" ]]}
ends_with() { endswith "$@"}
replace() { local str="$1" local old="$2" local new="$3" echo "${str//$old/$new}"}
replace_first() { local str="$1" local old="$2" local new="$3" echo "${str/$old/$new}"}
# String splittingsplit() { local str="$1" local delimiter="${2:- }" local -a result IFS="$delimiter" read -ra result <<< "$str" printf '%s\n' "${result[@]}"}
split_lines() { local str="$1" local -a result mapfile -t result <<< "$str" printf '%s\n' "${result[@]}"}
# String joiningjoin() { local delimiter="$1" shift local first="$1" shift local result="$first" for item in "$@"; do result="${result}${delimiter}${item}" done echo "$result"}
# String validationis_empty() { local str="$1" [[ -z "$str" ]]}
is_not_empty() { local str="$1" [[ -n "$str" ]]}
is_alpha() { local str="$1" [[ "$str" =~ ^[a-zA-Z]+$ ]]}
is_alnum() { local str="$1" [[ "$str" =~ ^[a-zA-Z0-9]+$ ]]}
is_alphanumeric() { is_alnum "$@"}
is_numeric() { local str="$1" [[ "$str" =~ ^[0-9]+$ ]]}
is_email() { local str="$1" [[ "$str" =~ ^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$ ]]}
is_url() { local str="$1" [[ "$str" =~ ^https?://[a-zA-Z0-9.-]+(\.[a-zA-Z]{2,})?(/.*)?$ ]]}
is_ip() { local str="$1" local ip_regex='^([0-9]{1,3}\.){3}[0-9]{1,3}$' if [[ ! "$str" =~ $ip_regex ]]; then return 1 fi # Check each octet is <= 255 IFS='.' read -ra octets <<< "$str" for octet in "${octets[@]}"; do if [[ "$octet" -gt 255 ]]; then return 1 fi done return 0}
# String transformationreverse() { local str="$1" local reversed="" local len="${#str}" for ((i=len-1; i>=0; i--)); do reversed="${reversed}${str:$i:1}" done echo "$reversed"}
shuffle() { local str="$1" local chars=() local shuffled="" # Convert to array for ((i=0; i<${#str}; i++)); do chars+=("${str:$i:1}") done # Fisher-Yates shuffle local len=${#chars[@]} for ((i=len-1; i>0; i--)); do local j=$((RANDOM % (i + 1))) local temp="${chars[$i]}" chars[$i]="${chars[$j]}" chars[$j]="$temp" done # Convert back to string for char in "${chars[@]}"; do shuffled="${shuffled}${char}" done echo "$shuffled"}
# String countingcount_chars() { local str="$1" local char="$2" local count=0 for ((i=0; i<${#str}; i++)); do if [[ "${str:$i:1}" == "$char" ]]; then ((count++)) fi done echo "$count"}
count() { count_chars "$@"}
count_substrings() { local str="$1" local substr="$2" local count=0 local pos=0 while [[ $pos -lt ${#str} ]]; do local found=$(indexof "$str" "$substr" "$pos") if [[ "$found" -eq -1 ]]; then break fi ((count++)) pos=$((found + ${#substr})) done echo "$count"}
# String formattingcenter() { local str="$1" local width="$2" local pad_char="${3:- }" local str_len="${#str}" if [[ "$str_len" -ge "$width" ]]; then echo "$str" return fi local total_pad=$((width - str_len)) local left_pad=$((total_pad / 2)) local right_pad=$((total_pad - left_pad)) local left_padding=$(repeat_str "$pad_char" "$left_pad") local right_padding=$(repeat_str "$pad_char" "$right_pad") echo "${left_padding}${str}${right_padding}"}
# String escapingescape_regex() { local str="$1" echo "$str" | sed 's/[][\.()*?{}|^$+]/\\&/g'}
escape_shell() { local str="$1" printf '%q' "$str"}
escape_html() { local str="$1" local result="$str" result="${result//&/&}" result="${result//</<}" result="${result//>/>}" result="${result//\"/"}" result="${result//'/'}" echo "$result"}
unescape_html() { local str="$1" local result="$str" result="${result//&/&}" result="${result//</</}" result="${result//>/>}" result="${result//"/\"}" result="${result//'/'}" echo "$result"}
# String comparison (case-insensitive)equals_ignore_case() { local str1="$1" local str2="$2" [[ "${str1,,}" == "${str2,,}" ]]}
contains_ignore_case() { local str="$1" local substr="$2" local lower_str="${str,,}" local lower_substr="${substr,,}" [[ "$lower_str" == *"$lower_substr"* ]]}
# String hashing (simple)hash_string() { local str="$1" local hash=0 for ((i=0; i<${#str}; i++)); do local char_code=$(printf "%d" "'${str:$i:1}") hash=$(((hash * 31 + char_code) % 2147483647)) done echo "$hash"}
# String to array conversionto_chars() { local str="$1" local -a result result=() for ((i=0; i<${#str}; i++)); do result+=("${str:$i:1}") done printf '%s\n' "${result[@]}"}
to_words() { local str="$1" local -a result read -ra result <<< "$str" printf '%s\n' "${result[@]}"}
# String utilitiesuuid() { if command -v uuidgen > /dev/null; then uuidgen elif [[ -f /proc/sys/kernel/random/uuid ]]; then cat /proc/sys/kernel/random/uuid else # Fallback: simple UUID-like string printf "%04x%04x-%04x-%04x-%04x-%04x%04x%04x" \ $RANDOM $RANDOM $RANDOM $RANDOM $RANDOM $RANDOM $RANDOM $RANDOM fi}
random_string() { local length="${1:-10}" local charset="${2:-abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789}" local result="" for ((i=0; i<length; i++)); do local pos=$((RANDOM % ${#charset})) result="${result}${charset:$pos:1}" done echo "$result"}
# Export module functionsexport_module string \ strlen length substr substring concat repeat_str repeat \ to_upper to_lower capitalize to_title \ ltrim rtrim trim \ lpad pad_left rpad pad_right \ indexof contains startswith starts_with endswith ends_with replace replace_first \ split split_lines join \ is_empty is_not_empty is_alpha is_alnum is_alphanumeric is_numeric is_email is_url is_ip \ reverse shuffle \ count_chars count count_substrings \ center \ escape_regex escape_shell escape_html unescape_html \ equals_ignore_case contains_ignore_case \ hash_string \ to_chars to_words \ uuid random_string