Как создавать файлы в зависимости от операций с параметрами

fish подчеркивание действительного пути по умолчанию:

$ set | grep fish_color_valid_path
fish_color_valid_path --underline

Вам нужно только сбросить его:

$ set fish_color_valid_path
$ ls /etc/fstab
0
11.04.2019, 01:41
1 ответ

Эта подпрограмма должна решить вашу задачу разделения строки -. Адаптируйтесь к вашим потребностям:

$ cat go.sh
#!/usr/bin/env bash
str="This will be divided"
ptr=0
interval=3
while [[ $ptr -le ${#str} ]]; do
   printf "'%-3s'\n" "${str:$((ptr)):$((interval))}"
   ptr=$((ptr+interval))
done

Используется:

$./go.sh
'Thi'
's w'
'ill'
' be'
' di'
'vid'
'ed '

При этом используется встроенный bashинструмент расширения параметров для извлечения подстроки. Учитывая переменнуюfoo:

  • $fooзаменяется содержимымfoo
  • ${#foo}заменяется количеством элементов в foo. Для массива это количество присвоенных значений; для массива, отличного от -, это длина строки, представленной $foo(foo=10; echo ${#foo}, дает2).
  • ${foo:4:4}заменяется содержимым foo, начиная с пятого символа (ноль является первым индексом ), для четырех символов.

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

Мы объединим это с отформатированными строками.:%-3sвыведет выровненную по левому краю -строку, дополненную пробелом -. Поэтому, если мы указываем только один или два символа, справа для нас добавляется пробел.

Для записи в файлы можно просто изменить

   printf "'%-3s'\n" "${str:$((ptr)):$((interval))}"

-

   fname="$dir/$(shuf -n 1 "$1")"
   tr -dc 'A-Za-z0-9' </dev/urandom | head -c 255 > "$fname"
   printf "'%-3s'\n" "${str:$((ptr)):$((interval))}" >> "$fname"
0
28.01.2020, 03:50

Теги

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