+4  A: 

I don't know if it's possible to change the default behavior of the shell, but you can at least format your output correctly, using io:format.

Here is an example:

1> io:format("~p~n", [[65, 66, 67]]).
"ABC"
ok
2> io:format("~w~n", [[65, 66, 67]]).
[65,66,67]
ok

And since the shell is only for experimenting / maintenance, io:format() should be at least enough for your real application. Maybe you should also consider to write your own format/print method, e.g. formatPerson() or something like that, which formats everything nicely.

tux21b
I do know about io:format and should probably have mentioned it in the question :)
Alexey Romanov
A: 

The problem is that the string is not a type in Erlang. A string is just a list of integers, so there's no way for the shell to distinguish a printable string from a generic list. Don't know if this answer to your question.

Roberto Aloi
Try entering `[65,66,67].` and `[1,2,3].` to your shell...
Zed
@Zed: I was aware of that. But I guess I've misunderstood the question. Now I got what he's trying to do. Thx.
Roberto Aloi
+5  A: 

I tend to do it by prepending an atom to my list in the shell.

for example:

Eshell V5.7.4  (abort with ^G)
1> [65,66,67].
"ABC"
2> [a|[65,66,67]].
[a,65,66,67]

could also be [a,65,66,67], of course. but [a|fun_that_returns_a_list()] will print "the right thing(ish) most of the time"

+1  A: 

No, there is no way to disable it. The best alternative I find is to either explicitly print out the value in the query (with io:format) or after the fact do: io:format("~w\n", [v(-1)]).

rvirding
A: 

I don't think you can prevent it. Prepending an atom seems like a kludge - it does alter your original string.

I typically use lists:flatten(String) to force it to a string - especially the returnvalue of io_lib:format() does not always print as a string. Using lists:flatten() on it makes it one.

I use the following "C-style":

sprintf(Format) ->
     sprintf(Format, []).
sprintf(Format, Args) ->
    lists:flatten(io_lib:format(Format, Args)).
haavee