Skip to main content

Hi guys,



I am using dscl . read to create an array with users in the Admin Group. However, its not giving me what I want.



I want each user in the Admin Group to be a separate element in the array. How do I do that? I tried using cut -d " " but that didn't work



#Users Array - All users in Admin group
USERS=$( dscl . -read Groups/admin GroupMembership | cut -c 18- )


Output:
USERS=([0]="root admin1 admin2")



Desired Output:
USERS=([0]="root" [1]="admin1" [2]="admin2")

You have to surround the variable with parentheses when declaring an array. Also, since you know the first element before the first IFS (space) is always going to be "GroupMembership:", you could just include every element beyond the first with awk This should work:



# Build an array of all group members of the admin group. Use awk to truncate the first field.
USERS=($(/usr/bin/dscl . read /Groups/admin GroupMembership | /usr/bin/awk '{print substr($0,index($0,$2))}'))

# Verify the array is built properly
for i in "${USERS[@]}"; do
echo "User: $i"
done

Thanks @ChrisCox thats exactly what I needed. I now have an array that I can I can loop through each user.


Reply