|
let’s implement split-by-double-dash, a function (or a program) that would return two lists: args that come before -- and ones that come after. split-by-double-dash a b c -- d e f should return the lists [a, b, c] and [d, e, f] FWIW in YSH (https://oils.pub/ysh.html), you can do this in a style that's like Python and JavaScript, but you can also combine it with shell idioms. First create it and pretty print it: ysh-0.34$ var li = :| a b c -- d e f | # shell word style, ['a', 'b'] style is also accepted
ysh-0.34$ = li # pretty print with =
(List) ['a', 'b', 'c', '--', 'd', 'e', 'f']
Then test out the indexOf() method on strings: ysh-0.34$ = li.indexOf('--')
(Int) 3
Then write the function: ysh-0.34$ func splitBy(li) {
> var i = li.indexOf('--')
> assert [i !== -1]
> return ( [li[ : i], li[i+1 : ]] ) # same slicing as Python
> }
Call it and unpack it ysh-0.34$ var front, back = splitBy(li)
ysh-0.34$ = front
(List) ['a', 'b', 'c']
Use it in shell argv, with @myarray as splicing: ysh-0.34$ write -- @back
d
e
f
|
(I guess we're duplicating threads at this point :D)