Цикл в macOS не работает

Недавно я унаследовал унаследованный код и хотел заменить все вхождения , например:

print "xx"
print x,y
print 'xx'

на

logging.info("xy") 

или

logging.info(x,y)

На основе предыдущего ответа и в надежде, что кому-то будет полезно it Я использовал следующую команду, которая изменит все вхождения:

%s/print\( .*\)/logging.info\(\1\)/g

Если вы замените % на . и удалите / g , вы получите с

.s/print\( .*\)/logging.info\(\1\)

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

6
02.04.2019, 11:02
2 ответа

Проблема здесь заключается в переменном раскрытии фигурных скобок.

Попробуйте переписать его на

for ((i=1;i<=$1;i++))
do
  #your code here
done
6
27.01.2020, 20:22

Ваш скрипт написан для zsh, но вы выполняете его с bash.

bashне поддерживает использование переменных в качестве диапазонов в фигурных скобках -.

Чтобы решить эту проблему, просто организуйте выполнение сценария или функции в zshоболочке (, особенно если сценарий длиннее того, что вы показываете, и использует другие zshфункции ). Эта оболочка по умолчанию устанавливается в macOS как /bin/zsh. Вы можете добавить #!/bin/zshв качестве первой строки скрипта, чтобы он выполнялся с zshпо умолчанию.

См. также:

8
27.01.2020, 20:22

Теги

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