Недавно я унаследовал унаследованный код и хотел заменить все вхождения , например:
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\)
, который позволит вам просматривать каждое совпадение и выбирать, менять ли вы его или нет.
Проблема здесь заключается в переменном раскрытии фигурных скобок.
Попробуйте переписать его на
for ((i=1;i<=$1;i++))
do
#your code here
done
Ваш скрипт написан для zsh
, но вы выполняете его с bash
.
bash
не поддерживает использование переменных в качестве диапазонов в фигурных скобках -.
Чтобы решить эту проблему, просто организуйте выполнение сценария или функции в zsh
оболочке (, особенно если сценарий длиннее того, что вы показываете, и использует другие zsh
функции ). Эта оболочка по умолчанию устанавливается в macOS как /bin/zsh
. Вы можете добавить #!/bin/zsh
в качестве первой строки скрипта, чтобы он выполнялся с zsh
по умолчанию.
См. также: