Объявление как локальная переменная прервет работу функции и выйдет из системы «1: ожидаемое число»

Нет ничего плохого ни в одном из опубликованных решений, но вы можете сделать это на чистом Bash, если хотите.

Дана строка с вашим значением:

echo $myStr 
ABCDEFGHIJKLMNOP

Вы можете сделать:

echo $(expr match "$myStr" '.*F\(.*\)K.*')
GHIJ
1
25.11.2016, 12:21
1 ответ

В более старых версиях zsh вы не можете инициализировать массив с помощью local (или typeset ] / объявить ) таким образом, вам нужно разделить его, например

local -a di_files # explicit array
di_files=( ... )

В v5.1 была добавлена ​​возможность одновременного объявления и присвоения массива.

Я считаю, что вы видите ошибку, потому что zsh обрабатывает инициализацию как скаляр, а () как квалификатор glob.

Вы также, вероятно, можете заменить сложный конвейер на более простой

open "${di_files[1]}"

Наконец, включая обработку файлов, не совпадающих:

function projectopen {
  setopt local_options nullglob
  local di_files=(*.xcworkspace */*.xcworkspace *.xcodeproj */*.xcodeproj)

  # open first existing file
  [ -n "${di_files[1]}" ] && open "${di_files[1]}"
}

С параметром nullglob каждое расширение глобуса, которое не соответствует файлам, заменяется на пустая строка (я подозреваю, что у вас может быть установлен параметр nonomatch , связанный параметр).

3
27.01.2020, 23:25

Теги

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