Description of problem: In Gawk version 3.1.3 strings can not be expanded within a while loop. Version-Release number of selected component (if applicable): 3.1.3 How reproducible: Always Steps to Reproduce: 1. Create a simple awk script. For example: #!/usr/bin/gawk -f # test.gawk BEGIN { comm="-al"; while("/bin/ls "comm | getline >0){ print } } 2. Run the script. ./test.gawk Actual results: garbage Expected results: listing of what's in my run directory Additional info: This works for any string in the while loop with variables. For example comm="w"; while( "ps -e" comm "f" | getline >0){ also does not work. An easy fix is to resolve the string before the loop, for example: joe="ps -e" comm "f" while( joe | getline >0){ This works fine in RedHat Enterprise 3.8 with Gawk 3.1.1 -Chris
Use parentheses around the string concatenation to get this working. Not using parentheses makes the expression ambiguous. Reference: htte://www.gnu.org/manual/gawk/html_node/Getline_002fPipe.html#Getline_002fPipe
Here is the right way to do it with the original script - #!/usr/bin/gawk -f # test.gawk BEGIN { comm="-al"; while(("/bin/ls "comm) | getline >0){ print } } Notice the parentheses in the expression in the "while" condition. - Didar
Since this has been already solved in previous comments, I'm closing this as NOTABUG.