Диапазон команды включил Unix

[ не "специальное предложение, встроенное", и согласно POSIX a Utility syntax error (option or operand error) из встроенного неспециального предложения Shall not exit неинтерактивная оболочка ("сценарий").

Так что касается того, почему оболочка не выходит. Сценарий функционирует отлично потому что ECHO_ESC установлен на что-то нормальное, неважно, как if ответвления.

В отличие от сообщения об ошибке предлагает, ошибка не прибывает из \c но == который недопустим для использования с [ (строковое равенство тестируется с синглом =), но оболочки та поддержка [[ (который поддерживает ==) кажется, позволяю == даже для нотации одиночной скобки (например. bash, ksh). Обратите внимание, что вышеупомянутый код не делает ошибки под ударом, таким образом, Вы могли бы хотеть рассмотреть переметки Вашего вопроса.

4
27.03.2014, 21:40
3 ответа
[114248] Нет, это одно и то же в каждой [114606] реализации [114607]. Цифры начинаются с одного, просто солярис не будет жаловаться, если вы предоставите 0, и будет считать, что это 1. И [114608]0[114609], и [114610]1[114611] означают первый символ, а [114612]2[114613] означает второй:


busybox

cut[114617] или [114618]cut[114619], встроенный в [114620]ksh93[114621] также не жалуются. GNU [114622]cut[114623] просто пытается помочь вам сказать, что вы, вероятно, не имеете правильного представления о том, что такое первый индекс.

Реальная разница, однако, в том, что GNU и busybox [114624] cut[114625] (по крайней мере, начиная с 2014-03-27 годов) считаются в байтах для [114626]-c[114627], в то время как Solaris или ksh [114628]cut[114629] считаются в символах (как того требует POSIX).

enter image description here

(в локали UTF-8, é (U+00E9) занимает 2 байта)[114255].

4
27.01.2020, 20:51
[114234]Да, это действительно может зависеть от операционной системы (или скорее зависит от того, кто написал вашу версию [114570]cut[114571]).

Если вы посмотрите на [114572]man cut[114573], вы увидите, что [114574]cut[114575] из GNU's [114576]coreutils[114577] насчитывает байты, символы и поля из 1:

Use one, and only one of -b, -c or -f. [...] Каждый диапазон - один из:[114788].       [114789]N[114790] [114791]N[114792] байт, символ или поле, отсчитываемое от 1

c---rw---- 1 root lp 6, 0 2011-06-26 22:47 /dev/lp0

Опять же, это может отличаться в другой системе, если ее сопровождающие решили использовать реализацию [114580]cut[114581], отличную от GNU, так что лучше быть осторожными и взглянуть на страницу управления, чтобы быть уверенным.[114241]

2
27.01.2020, 20:51

Это даже работало раньше на Linux. Я просто укусил его (на Debian после обновления пакета COREUTILS, который содержит команду CUT) и нашел эту ошибку.

Это ошибка в Coreutils:

https://bugs.launchpad.net/ubuntu/+source/coreutils/+bug/211262

Кто-то сломал обратную совместимость, и никто не исправил. Раньше было такое 0 было хорошо, тоже и рассматривается как 1. Теперь 0 выпускает ошибку. Таким образом, все сценарии, которые зависят от этого поведения, сломаны и должны быть изменены.

1
27.01.2020, 20:51

Теги

Похожие вопросы