I’m sure some of you have absolute monstrosities of sigils (I know I do, in my .zshrc alone). Post them without context, and try and guess what other users’s lines are. If you want to provide context or guess, use the markdown editor to spoiler-tag your guesses and explanations!

  • varsock@programming.dev
    link
    fedilink
    English
    arrow-up
    1
    ·
    1 year ago

    typeset -a $1=(“${(@ps[$2])”${2:-“$(<&0)”}“}”)

    spoiler

    So, overall, this script reads input from $2 or stdin if $2 is not provided, splits it into an array based on the delimiter $2, and then assigns the array to the variable named $1. Note that this script only works in Zsh, not in Bash. Zsh has a more advanced parameter and array system than Bash, so this script can’t be directly translated into Bash.

    1. typeset -a: This part declares an array variable.
      • -a flag specifies that the variable is an array.
    2. $1=("${(@ps[$2])"${2:-"$(<&0)"}"}"):
      • $1 refers to the first argument passed to the script.
      • "${2:-"$(<&0)"}" is an expansion that evaluates to the second argument passed to the script. If the second argument is not provided, it reads input from standard input (<&0 means read from stdin).
      • "${(@ps[$2])" is an expansion that performs parameter splitting.
      • @ specifies that the expansion should be split into separate array elements.
      • (ps[$2]) is a parameter expansion that performs word splitting on the second argument.
    3. The entire expression "${(@ps[$2])"${2:-"$(<&0)"}"}" is wrapped in parentheses and assigned to the variable specified by $1.

    In summary, this script takes two arguments: $1 represents the name of the array variable, and $2 represents the values to be assigned to that array. It then assigns the array $2 to the variable named by $1 after performing parameter and word splitting on the second argument. If the second argument is not provided, it reads input from standard input.