Oil Language FAQ

Here are some common questions about the Oil language. Many of the answers boil down to the fact that Oil is a smooth upgrade from bash.

Old and new constructs exist side-by-side. New constructs have fewer "gotchas".

Table of Contents
What's the difference between $(dirname $x) and $len(x) ?
How can I return rich values from shell functions / Oil procs?
Why doesn't a raw string work here: ${array[r'\']} ?
Related

What's the difference between $(dirname $x) and $len(x) ?

Superficially, both of these syntaxes take an argument x and return a string. But they are different:

(Note: builtin subs like ${.myproc $x} are meant to eliminate process overhead, but they're not yet implemented.)

How can I return rich values from shell functions / Oil procs?

There are two primary ways:

(Oil may grow true functions with the func keyword, but it will be built on top of proc and the builtin sub mechanism.)

Send us feedback if this doesn't make sense, or if you want a longer explanation.

Why doesn't a raw string work here: ${array[r'\']} ?

This boils down to the difference between OSH and Oil, and not being able to mix the two. Though they look similar, ${array[i]} syntax (with braces) is fundamentally different than $[array[i]] syntax (with brackets).

Of course, Oil style is preferred when compatibility isn't an issue.

No:

echo ${array[r'\']}

Yes:

echo $[array[r'\']]

A similar issue exists with arithmetic.

Old:

echo $((1 + 2))   # shell arithemtic

New:

echo $[1 + 2]     # Oil expression

Related


Generated on Sat Feb 19 18:43:17 EST 2022