Сценарий Bash: справочный файл в сценарии или в другом файле?

Это:

set arrname = ("x" "nx" "y" "ny" "z" "nz")

обычное присваивание массива (BTW, кавычки не нужны в этом случае).

Это:

set arrname = (x,nx,y,ny,z,nz)

также делает $arrname массив, но это имеет только один элемент со значением x,nx,y,ny,z,nz (запятые не являются особенными в этом контексте).

Это:

set arrname = {x,nx,y,ny,z,nz}

использует шаблон шарика; так же, как {foo,bar}.txt расширяется до foo.txt bar.txt, так {x,nx,y,ny,z,nz} расширяется до x nx y ny z nz.

По-видимому, tcsh позволяет Вам использовать {x,nx,y,ny,z,nz} как инициализация массива, хотя, если Вы разворачиваете его сами до:

set arrname = x nx y ny z nz

это устанавливает $arrname только к x и тихо игнорирует другие аргументы. Это - один из многих нечетных незначительных сбоев в пути csh, и tcsh анализируют аргументы команды. Я использовал csh и tcsh в течение многих десятилетий сам (хотя я недавно переключился главным образом для избиения), и я обычно сталкиваюсь со случаями как это, где я должен экспериментировать, чтобы определить, как что-то собирается работать.

Если Вы хотите установить $arrname к значению массива используйте круглые скобки и не используйте запятые.

И как barmar упомянутый в комментарии, необходимо считать это:

http://www.faqs.org/faqs/unix-faq/shell/csh-whynot/

csh и tcsh действительно имеют несколько более удобный синтаксис массива, чем удар имеет. В csh и tcsh, можно обратиться к 3-му элементу массива как $arrname[3]; в ударе необходимо добавить фигурные скобки: ${arrname[3]}. Кроме того, массивы удара на основе 0, в то время как массивы csh/tcsh на основе 1. Но большая непротиворечивость синтаксиса и семантики удара, по моему скромному мнению, больше, чем восполняет это.

Некоторые примеры простого массива, в csh:

% set arr = ( 10 20 30 )
% echo $arr
10 20 30
% echo $arr[3]
30

и в ударе:

$ arr=(10 20 30)
$ echo ${arr[@]}
10 20 30
$ echo ${arr[*]}
10 20 30
$ echo ${arr[2]}
30

( [@] и [*] синтаксис ведет себя тонко по-другому; см. документацию удара для деталей.)

5
24.03.2014, 00:22
2 ответа
[112605]2 подхода, которые я вижу здесь:[12318] установка раздела с последовательным вводом или [113462]POD-подобной [113463] документации для отображения в качестве справки, или [12319] правильное определение [113464]. man[113465] файл для добавления в вашу локальную структуру [113466]man[113467][12320]Я честно не вижу смысла иметь отдельный файл для такого рода помощи, если только у вас нет очень большого инструмента и интерфейс/GUI уже находится в разных файлах. [12321]Так что оставайтесь "[113155]простым и понятным[113156]": все в одном файле, относящемся к вашему фронтенду командной строки.[12322]Вы все еще можете организовать его в виде фрагмента внутреннего текста или правильно определенной функции, единственной целью которой является отображение справки. Так что не делайте ничего плохого бедному парню, который будет поддерживать ваш скрипт через 10 лет.[112614].
2
27.01.2020, 20:39
[112663] Я согласен с тем, что мы с Оуки пока что сохраним его простым и в рамках сценария. Когда и если вы решите, что вам нужна man-страница, вы можете пересадить туда и оставить упрощенную справку. [12357] Изучение 3 из 4 ваших недостатков этого подхода по сравнению с отдельным файлом:[12358] Основной скрипт, вызываемый командой myscript, был бы легче[12359]В память загружалось бы тривиальное количество байт - настолько тривиально было бы глупо думать об этом.[12360]Это упрощает чтение скрипта человеком[12361]Если вы хорошо организованы, то верно обратное, так как иметь под рукой эту помощь в исходном тексте - это форма документации к самому коду (смотрите ниже). [12362]Это даже может позволить отобразить только страницу справки с графическим интерфейсом и/или распечатать ее.[12363]Акцент на модульность в системах в стиле unix означает, что вам лучше не беспокоиться об этом. Если ваш скрипт пишет на стандартный вывод, пользователь может комбинировать это с любыми инструментами, которые он предпочитает в отношении печати и отображения. Немного вещей более раздражающих, чем программы, которые стремятся реализовать ненужные функции, отражающие, например, предпочитаемый автором способ просмотра документации. Не делайте этого. Если это инструмент командной строки на переднем плане, ваш обычный вывод должен быть в стандартном потоке вывода, а ошибка в стандартном потоке ошибок. Не сходите с ума.[12364]Если вы не знаете о документах [113250] "здесь"[113251], это может упростить вам задачу и сохранить исходный текст аккуратным и более читабельным:[12365]Обратите внимание, что для опции помощи вызывается функция, которая сохраняет блок [113252]if[113253] аккуратным. Это также означает, что вы можете поместить эту функцию [113254]вверх[113255], что делает ее очевидной формой ссылки на сам источник.[12366]Вы можете сделать отступ здесь doc в [113256]myHelp()[113257], BTW -- табуляции игнорируются, но пробелы сохраняются. Я сделал это здесь, чтобы предотвратить любые запутанные результаты отсечения n' paste.[112674].
3
27.01.2020, 20:39

Теги

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