0

Hi..
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
username:uid
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

3
Contributors
2
Replies
3
Views
10 Years
Discussion Span
Last Post by ghostdog74
0
for i in $(cut -f 1,3 -d: /etc/passwd)  
do 
  echo "${i#*:}" "${i%:*}" 
done

This lets you see what is going on.

${i#*:}

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

${i%:*}

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

${i%:*}

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.

0

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
This topic has been dead for over six months. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.