>> FELIX-1471 proposes using () for grouping and $() for evaluation.
>> So the above example would become:
>> > x = (echo aa; (echo ab; echo ac | grep -n a | tac))
>>
>
> Not sure about this one.
> I guess i've been fooled in my testing by the fact that when evaluating a
> command, you have two results: the output on the console and the object
> returned by the command.
> We need to handle both at some point.
> But for this, we need to exactly define when the returned object will be
> printed to the console (or the piped output stream).
>
Yes, I raised FELIX-1474 about the implicit writing of command results to pipes.
We should discuss this separately to avoid complicating this thread.
> The next question is what happens when "..." is defined by multiple tokens:
>> x = a b
> What does that mean ? I'm not sure of the answer.
It assigns x the result of the command: a b
See Peter's initial comment in this thread:
>>> a = hello world
>>>Is NOT a = "hello world". And I do not think it should be.
> The patch for FELIX-1325 alter this behavior and reject any assignment with
> multiple arguments.
I don't think that this is necessary. RFC-132 explicitly allows this
(4.13 Command calling):
<string> '=' <value> + execute values as statements, set
result as variable
However, if a single value is used in an assignment, then it shouldn't
be executed, so:
x = echo
does NOT set x to "" (the result of echo).
>> FWIW I still think it is possible to solve this without introducing $(),
> This made me think a bit differently. The real issue is not about grouping
> / evaluating.
> Currently, the < > operator means: evaluate the command line inside and
> return the value.
> The real problem comes from the fact that the number of evaluations is
> wrong.
> So I came up with a new simplier patch that I think solve the issue while
> keeping <> as you mentionned.
> I've attached it to FELIX-1471 and it's available at
> https://issues.apache.org/jira/secure/attachment/12417086/FELIX-1471-2.patch
> It also includes a fix for FELIX-1325 and FELIX-1498, and introduce a new
> "eval" keyword.
> Let me know what you think, but this looks like a cleaner solution.
Yes, this is much cleaner. I mentioned the use of an eval function
earlier in this thread.
I have tested FELIX-1471-2.patch and although mostly OK, e.g.
ka...@root> <echo a a; <echo a b; echo ac | grep -n a | tac>>
a a
1 a b 3 ac
as expected.
I don't like the new assignment restriction:
ka...@root> x = <echo a a; <echo a b; echo ac | grep -n a | tac>>
a a
pipe: java.lang.IllegalArgumentException: Assignements can only have a
single argument
ka...@root> x = <echo hello world>
hello world
ka...@root> echo $x
null
ensure we are using osgi:echo (which returns a String):
ka...@root> SCOPE=osgi:*
osgi:*
ka...@root> x = <echo hello world>
pipe: java.lang.IllegalArgumentException: Assignements can only have a single
agument
ka...@root> x = '<echo hello world>'
hello world
I have further simplified FELIX-1471-2.patch and created FELIX-1471-3.patch
https://issues.apache.org/jira/secure/attachment/12417131/FELIX-1471-3.patch
1. removes restriction that assignments only have single argument
2. removes code to re-parse string results - not needed now we have eval()
(eval is now a regular command like tac, rather than a special keyword).
3. updated tests
Let me know if this works for you.
Derek