Объединение расширения фигурной скобки и перенаправления вывода

+= оператор появился в версии 3.1 Bash.

  • В более старых версиях, если массив не является разреженным, можно или присвоить элементу после последнего элемента массива:

    NODES[${#NODES[@]}]="$WAS_IP"
    

    При добавлении новых значений в одном определенном месте можно использовать отдельную переменную счетчика:

    NODES=()
    NODES_length=0
    NODES[NODES_length++]="$WAS_IP"
    

    Но это просто умеренно быстрее, чем выяснение у длины массива с ${#NODES[@]}.

  • Или можно присвоить целый массив существующим элементам и новому:

    NODES=("${NODES[@]}" "$WAS_IP")
    

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

7
04.07.2014, 01:59
3 ответа

Вы можете ввести:

$ cat very-long-filename.ext1Ctrl+WCtrl+Y>Ctrl+YBackspace2

Или:

$ cat very-long-filename.ext1Ctrl+WCtrl+Y>Ctrl+YBackspace2

Или:

$ cat very-long-filename.com. Ctrl+WCtrl+Yext1>Ctrl+Yext2

Чтобы по-настоящему использовать brace-расширение, обратите внимание, что:

cat a.ext1 > a.ext2

Можно также написать:

cat > a.ext2 a.ext1

Однако вы не можете сделать:

cat > a.ext{2,1}

Однако, вы можете сделать:

eval cat \> a.ext{2,1}
11
27.01.2020, 20:15

А как же:-

f=really-long-filename; cat "$f.ext1" > "$f.ext2"
2
27.01.2020, 20:15

Используйте функцию оболочки

 xyx () { cat "$1".$2 > "$1".$3; }

, затем

xyz fie foo fum

развернется до

cat fee.foo > fee.fum
1
27.01.2020, 20:15

Теги

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