| ▲ | xorcist 14 hours ago | |||||||
Bash while loops are pretty readable and the above would be a nice to iterate over lines if it wasn't for that gnarly pipe, which is a common source of errors in this construct. Remember that a pipe starts a new shell. So:
where you might expect $found to end up with the value for the line that has "target" in the first column. Then you notice that darn pipe symbol. The variable found is set in a subshell that terminates and the value is lost. This is a problem every time you need to keep some sort of state when looping. If you can tolate a bash-ism then you could do:
but that doesn't read as nice and isn't compatible. It does avoid a common source of problems though, and might be worth getting into muscle memory for the times it is needed. | ||||||||
| ▲ | eqvinox 10 hours ago | parent | next [-] | |||||||
You can put the "< <( foo )" before the "while" btw, for pipe-like ordering of things. All redirections can be anywhere on the command line. | ||||||||
| ▲ | dylan604 14 hours ago | parent | prev [-] | |||||||
> and isn't compatible is that a GNU v POSIX type of compatibility issue? | ||||||||
| ||||||||