Extracting the filename and extension from an absolute path
eg.,
Input: abspath="/var/tmp/localuserinfo.out"
Filename with extension:
$ basename ${abspath} localuserinfo.out
Extension:
$ basename ${abspath##*.} -OR- $ echo ${abspath##*.} out
${variable##pattern}
trims the longest match from the beginning of a string. Likewise ${variable#pattern}
trims the shortest match from the beginning of a string.
Filename without extension:
$ basename ${abspath%.*} localuserinfo
${variable%pattern}
trims the shortest match from the end of a string. Similarly ${variable%%pattern}
trims the longest match from the end of a string.
Ref:
- Bash Reference Manual -> Shell Parameter Expansion -> ${parameter##word}
- bash String Manipulations by Jim Dennis
Replacing commas with white space in a string
eg.,
Input: dummystr="Python,C,Java"
To replace all matches:
$ echo ${dummystr//,/ } Python C Java
To replace only the first match:
$ echo ${dummystr/,/ } Python C,Java
The difference is the extra '/' in pattern in first expression. If pattern begins with '/', all matches of pattern are replaced with string. Otherwise, only the first match is replaced.
Ref: Bash Reference Manual -> Shell Parameter Expansion -> ${parameter/pattern/string}
Sending array as argument to a shell function
Expand array before passing as argument to a function in a shell script. Sending the array name only passes the first element of the array.
Since $@
holds all arguments passed to the function, access the array argument with the help of $@
in the function definition. Using variables $1, $2, .., $n gives access to individual elements in the array.
$ cat numbers.sh #!/bin/bash # print_array() .. prints all elements as expected function print_array() { int_array=("$@") for elem in "${int_array[@]}" do echo $elem done } # print_array2() .. prints only one element .. first one in the array function print_array2() { int_array=($1) for elem in "${int_array[@]}" do echo $elem done } numbers=(1 2 3 4) echo "Attempting to print numbers array .." print_array ${numbers[@]} echo echo "Attempt #2 with a different function .." print_array2 ${numbers[@]} echo echo "Attempt #3 with only the array name as argument to print_array function .." # following call prints only the first element of the array print_array ${numbers} $ ./numbers.sh Attempting to print numbers array .. 1 2 3 4 Attempt #2 with a different function .. 1 Attempt #3 with only the array name as argument to print_array function .. 1
No comments:
Post a Comment