Область применения управляющей переменной цикла в shell? [закрыто]

Есть ли другой способ удалить файл без использования rm ?

busybox rm -f path/to/file

Предполагается, что ваше приложение для планирования позволяет запускать busybox без ограничений. Поскольку вы не указали, какое это приложение, мы точно не знаем, каковы ограничения, но приведенное выше должно работать, если в приложении есть простая защита молли, предотвращающая выполнение только rm .

1
24.06.2017, 20:00
2 ответа
$ reset() { i=$1; }
$ for i in 1 2 3 4 ; do echo -n "$i "; reset 3; echo "$i" ; done;
1 3
2 3
3 3
4 3

iне делается локальнымв сбросе, поэтому изменение там видно вне функции. Но изменение на iне влияет на значения i, получаемые на следующих итерациях. Слова, перечисленные в команде for, назначаются iпо одному, по порядку, как и ожидалось.

Так что да, есть «скрытый указатель», который сообщает позицию в списке слов. Должны быть, иначе циклы с повторяющимися словами, например for i in a a a ; делать ...не будет работать. Здесь iполучает одно и то же значение на каждой итерации, но цикл по-прежнему выполняет фиксированное количество итераций.

1
27.01.2020, 23:33

Я не уверен, что вы пытаетесь сделать, но

  1. Вы никогда не возвращаете 0] ("true") из функции, поэтому она никогдане вернется, пока не перепробует все комбинации.
  2. $iнелокальная переменная:

    $ foo() { i=1; бар; }
    $ бар () { эхо $ я; }
    $ фу
    1
    
  3. Вы можете отладить это, увидев, в какой строке находится каждая команда:

    trap 'printf "$LINENO" ' DEBUG
    
  4. $1является локальным для каждого вызова функциии не переносится, даже когда функция вызывает сама себя:

    $ foo() { if [ $# -ne 0 ]; затем повторите «Еще раз»; фу; фи; }
    $фу 1
    Еще раз
    

    Это относится ко всем основным языкам программирования высокого уровня. В противном случае рекурсия была бы полностью нарушена.

1
27.01.2020, 23:33

Теги

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