Цикл с исключением в bash

У вас есть два скрипта, один выдает две строки и два числа. Вам решать, как разобрать это во втором скрипте как две строки и два числа.

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

Вы сами определяете формат, порядок и интерпретацию данных, которые вы передаете между двумя сценариями. Вы даже можете отправлять данные в двоичном коде, если это имеет для вас смысл.

Не существует типов данных, которые можно применить к данным, кроме тех, которые вы создаете сами, выбирая конкретный «контракт» или «протокол» между вашими двумя сценариями или программами.

Некоторые стандартные инструменты Unix, такие как sortи cut, предполагают ввод данных в определенном формате, но их можно заставить изменить интерпретацию входных данных с помощью параметров командной строки.

Надуманный пример:

#!/bin/sh

echo 'first string'
echo 'second string'

echo '1.1'
echo '3.14'

Затем второй скрипт читает это:

#!/bin/sh

IFS= read -r string1
IFS= read -r string2
read number1 number2

Или с помощью JSON:

#!/bin/sh

echo '{ "string1": "hello", "string2": "world", "numbers": [1.1,3.14] }'

Второй сценарий:

#!/bin/sh

jq -r '"A number: \(.numbers[])"'
2
19.10.2019, 15:04
1 ответ

С расширенными глобусами (shopt extglob, установленными в Bash ), !(a).pyдолжны соответствовать всем именам файлов, оканчивающимся на .py, кромеa.py:

$ shopt -s extglob
$ ls 
a.py  bar.py  foo.py  foo.txt
$ echo !(a).py
bar.py foo.py

Но вы также можете просто исключить этот файл вручную с помощью теста, для этого не потребуются никакие специфические функции Bash -:

for f in./*.py; do
    [ "$f" = a.py ] && continue
    python "$f"
done
4
27.01.2020, 21:58

Теги

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