TSV is the format shell speaks. jq -r @tsv , git for-each-ref --format , ps --format , anything piped into awk -F'\t' — when a shell script needs columns, it gets tabs. And the canonical way to read them back is one line everybody has written: IFS = $' \t ' read -r a b c That line does not read TSV. It reads something else that looks exactly like TSV until a column is empty , and then it hands you the wrong value in a variable with the right name. Every ...