im a newbie in shell scripting, and also new in this forum..
i understand the command below is just reading from /etc/passwd
and getting whatever in field 1 and 3 (which are username and userID)

after the cut the format will be
my guess,its making the array with the index in respect to its userID

but i dont understand the expression
{i#*:}]=${i%: *}
could somebody please explain how to read those...
and what those will evaluate to...
and how to work with things like those(i dont think those're regex-i have no clue)..

for i in $(cut -f 1,3 -d: /etc/passwd) ; do array[${i#*:}]=${i%: *}done

for i in $(cut -f 1,3 -d: /etc/passwd)  
  echo "${i#*:}" "${i%:*}" 

This lets you see what is going on.


is parameter substitution- returns the value just before the colon - a number that is the user id.


returns the username, so:
arr[number] = name


was changed from

${i%: *}

which doesn't work, by the way.
Try man (or info) for bash or ksh. This is called parameter substitution using a POSIX shell. It finds substrings.

bash's parameter substitution is a good feature to have, but it has ugly syntax. for what you want to do, you can use awk

awk -F":" '{print $3,$1}' /etc/passwd
Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.