разделить строку с помощью разделителя и сохранить оба поля в другой переменной

Посмотрите каталог /etc/modprobe.d/. Если есть файл blacklist -native -rtl8192.conf. Прокомментируйте все его строки и сохраните. Затем попробуйте запустить

sudo modprobe rtl8732be

Затем следуйте инструкциям наhttps://askubuntu.com/questions/772180/wifi-not-working-on-realtek-rtl8723be-wifi-adapter

Была точно такая же проблема на моей Ubuntu 16.04.

2
10.03.2020, 17:59
1 ответ

cutпо умолчанию читает со стандартного ввода. В вашей подстановке команд стандартный ввод наследуется от стандартного ввода цикла (, поскольку вы не предоставляете никакого другого явного ввода для вызововcut). Стандартный ввод цикла поступает из вашего входного файла.

Эффект заключается в том, что первая строка вашего файла читается read, а все остальные строки читаются самым первым вызовом cut. Таким образом, значением в переменной jobidбудет новая строка -с разделителями строк идентификаторов заданий, в то время как переменная idбудет пустой. Цикл будет выполнять только одну итерацию.

Вы можете использовать , например,

id=$( printf '%s\n' "$line" | cut -d: -f1 )

# or: id=$( cut -d: -f1 <<<"$line" )
# (in shells that supports "here-strings")

но в этом нет необходимости, так как это будет чище и гораздо эффективнее

while IFS=: read -r id jobid; do
    # code that uses "$id" and "$jobid" goes here
done <my_file.txt

Здесь используется тот факт, что readможет считывать данные из строки ввода в несколько переменных одновременно. Установив для IFSдвоеточие, строка разделяется на двоеточие, и первое поле считывается в id, а остальные считываются в jobid. Нет необходимости звонить cutвообще.

6
28.04.2021, 23:20

Теги

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