Вам не хватает набора скобок:
System.out.println("Using == ::" + (s3==s4));
В вашей версии "Using == ::" + s3
сравнивается с ==
до s4
, что вам не нравится.
В общем случае +
имеет более высокий приоритет , чем ==
, поэтому "Using == ::" + s3==s4
оценивается как ("Using == ::" + s3) == s4
.
Ядро не выполнит сценарий, если интерпретатор
Тогда, если ядро отказывается выполнять скрипт, ваша оболочка может [// g0] взять верх и попытаться выполнить ее в любом случае, интерпретируя строку shebang в соответствии со своими собственными правилами (например, найти исполняемый файл в $PATH
, например).
zsh
пытается это сделать. sh
не делает.
Однако способ zsh
интерпретирует shebang (и, возможно, последующие строки) действительно действительно странно. Похоже, он всегда ожидает аргумент single после имени команды. Посмотрите, что он делает:
$ cat test.py
#!python3 -b -i
x=5
print('The value of x is ' + str(x))
$ strace -f -e execve zsh
execve("/bin/zsh", ["zsh"], 0x7ffd35c9e198 /* 78 vars */) = 0
host% ./test.py
strace: Process 5510 attached
[pid 5510] execve("./test.py", ["./test.py"], 0x558ec6e46710 /* 79 vars */) = -1 ENOENT (No such file or directory)
[pid 5510] execve("/usr/bin/python3", ["python3", "-b -i", "./test.py"], 0x558ec6e46710 /* 79 vars */) = 0
[pid 5510] execve("/usr/lib/python-exec/python3.4/python3", ["/usr/lib/python-exec/python3.4/p"..., "-b -i", "./test.py"], 0x7fffd30eb208 /* 79 vars */) = 0
Unknown option: -
usage: /usr/lib/python-exec/python3.4/python3 [option] ... [-c cmd | -m mod | file | -] [arg] ...
Try `python -h' for more information.
[pid 5510] +++ exited with 2 +++
--- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=5510, si_uid=1000, si_status=2, si_utime=0, si_stime=0} ---
host%
+++ exited with 2 +++
Посмотрите, как ["python3", "-b -i", "./test.py"]
передаются в качестве аргументов. Мне кажется очень противоречащим мне объединить два переключателя -b
и -i
вместе, но это то, что делает zsh. Python, очевидно, этого не понимает.
Когда аргументов нет, точное поведение зависит от наличия пробела после имени программы, но в любом случае это странно. Проверьте его с strace
самостоятельно, потому что вы не собираетесь мне верить.
Я понимаю, что обработка zsh строки shebang просто глючит.