Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
Re: Printing arrays for use with $()
On Aug 12, 10:29am, DervishD wrote:
}
} > But again all of this assumes you can control the caller, which means
} > you could just as easily require IFS=$'\0'.
}
} Do you mean something like this?:
}
} IFS=$'\0' du -s `myscript`
Yes, except that you need a semicolon ...
IFS=$'\0'; du -s `myscript`
... which also means that you probably need to save and restore the old
value of IFS. From that standpoint the "eval" is likely better.
} I'm thinking about another solution that could be better, since
} sometimes I want to manually review the list before passing it to the
} command (and the scripts generates a *different* list each time is
} called):
}
} array=(`myscript args`)
A potential way to do this would be to have myscript print the entire
assignment expression:
print -r -- array=\( ${(q)array} \)
and then have the caller simply do:
eval $(myscript args)
} Could I do the above, using 'print -N', and after that forcing
} the split in NULLs? I've tested this (doesn't work):
}
} array=(`print -N -- $list`)
This doesn't work because in an array context zsh is going to split on
$IFS during the assignment itself, so you already have the wrong thing
in $array before you even get as far as printing it. You need to use
a scalar assignment:
notyetarray=`print -N -- $list`
array=(${(s:$'\0':)notyetarray})
Or (note the double quotes):
array=( ${(ps:\0:)"$(print -rN -- $list)"} )
} Any way of doing this without much mess?
The above is about as un-messy as it gets.
Messages sorted by:
Reverse Date,
Date,
Thread,
Author