3

Explanation of bash-specific syntax

 2 years ago
source link: https://www.codesd.com/item/explanation-of-bash-specific-syntax.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

Explanation of bash-specific syntax

advertisements

Came across this piece of code:

for entry in $(echo $tmp | tr ';' '\n')
do
echo $entry
  rproj="${entry%%,*}"
  rhash="${entry##*,}"
  remoteproj[$rproj]=$rhash
done

So I do understand that initially ';' is converted to new line so that all entries in the file are on a separate line. However, I am seeing this for the first time:

rproj="${entry%%,*}"
rhash="${entry##*,}"

I do understand that this is taking everything before ',' and after comma ',' . But, is this more efficient than split? Also, if someone please explain the syntax because I am unable to relate this to regular expression or bash syntax.


These are string manipulation operators.

${string##substring}

Deletes longest match of $substring from front of $string.

Meaning it will remove everything before the first comma, including it

${string%%substring}

Deletes longest match of $substring from back of $string.

Meaning it will remove everything after the last comma, including it


Btw, I would use the internal field separator instead of the tr command:

IFS=';'
for entry in $tmp ; do
    echo $entry
    rproj="${entry%%,*}"
    rhash="${entry##*,}"
    remoteproj[$rproj]=$rhash
done
unset IFS

Like this.

Tags bash

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK