как удалить vscode с помощью apt

Для повторения каждого символа строки в ksh93, bashилиzsh:

string=whatever
for ((i = 0; i < ${#string}; i++)); do
   printf '%s\n' "Character $((i + 1)): ${string: i:1}"
done

Вzsh(то же, что и в yash, за исключением того, что yashне поддерживает синтаксис for ((...))), см. также:

for ((i = 1; i <= ${#string}; i++)); do
   printf '%s\n' "Character $i: $string[i]"
done

Или с помощьюs(флага расширения параметра разделения)с пустой строкой в ​​качестве разделителя:

for c (${(s"")string}) something with "$c"

Для преобразования символа в строку вы должны использовать либо конструкцию case, например:

case $c in
  (A) s='{O.O}';;
  (a) s='{q-p}';;
 ...
esac

Или ассоциативный массив:

  • zsh:

    typeset -A map
    map=(
      A  '{O.O}'
      a  '{q-p}'
     ...
    )
    s=$map[$c]
    
  • ksh93/bash:

    typeset -A map
    map=(
      [A]='{O.O}'
      [a]='{q-p}'
     ...
    )
    s=${map[$c]}
    

Переносимо (со стандартным shсинтаксисом ), вы также можете сделать:

map='|A={O.O}|a={q-p}|...'
s=${map#*"|$c="}
s=${s%%"|"*}

(при условии, что ни одна из строк не содержит |символов ).

Или вы также можете вызвать соответствующую утилиту обработки текста -(использовать оболочку для вызова команд, поскольку она предназначена для этого, и утилиту обработки текста для обработки текста ).

STRING=whatever awk -F= '{map[$1] = $2}
   END {
     s = ENVIRON["STRING"]
     l = length(s)
     for (i = 1; i <= l; i++) {
       c = substr(s, i, 1)
       print map[c]
     }
   }' << EOF
A={O.O}
a={q-p}
...
EOF

(однако имейте в виду, что некоторые реализации awk, такие как mawk, поддерживают только одиночные -байтовые символы ).

1
23.08.2019, 22:22
1 ответ

Я также очень сбит с толку, увидев dirmngrкак шаблон, который вы искали.

1. Однако, если у вас есть .debфайл, который вы установили, но не знаете, какому фактическому пакету он соответствует, вы можете запустить dpkg-deb -W.

Для иллюстрации на примере epson-printer-utility_1.0.2.deb:

 $ ls *.deb
 epson-printer-utility_1.0.2.deb

 $ sudo dpkg-deb -W epson-printer-utility_1.0.2.deb
 epson-printer-utility  1.0.2-1lsb3.2

2. Что интересно, так это то, что пытаться выяснить, какой пакет был установлен из оригинального имени файла.deb, никогда не бывает хорошей идеей, потому что если вы просто сделаете копию и дадите ей другое имя:

$ cp epson-printer-utility_1.0.2.deb abcde.deb

$ sudo dpkg-deb -W abcde.deb
epson-printer-utility   1.0.2-1lsb3.2

3. И, наконец, если вы когда-нибудь захотите найти всю информацию из данного.deb, и особенно если у вас уже установлен этот конкретный пакет, вы можете запустить sudo dpkg-query -s [package name given by dpkg-deb]или за один шаг (заменить «abcde. deb" вашим файлом.deb, поставьте "", если в нем есть пробелы):

sudo dpkg-query -s $(dpkg-deb -f abcde.deb | grep "Package" | cut -d: -f2)

Package: epson-printer-utility
Status: install ok installed
Priority: extra
Section: alien
Installed-Size: 10652
Maintainer: Seiko Epson Corporation <linux-printer@epson.jp>
Architecture: amd64
Version: 1.0.2-1lsb3.2
Depends: lsb (>= 3.2)
Description: Epson Printer Utility for Linux

Обновление

Для финальной команды можно "обычно" также использовать немного укороченную версию:

dpkg-query -s $(dpkg-deb -W abcde.deb |cut -f1)

до тех пор, пока кто-то не сойдет с ума и не создаст пакет с [TAB]вставленным в имя, потому что с CTRL+VTAB имя файла действительно может быть сделано выглядеть вот так:

$ cp abcde.deb "abc  de.deb"
$ ls 
'abc'$'\t''de.deb'   abcde.deb

Тем не менее, он по-прежнему будет работать так, как задумано:

$ dpkg-deb -W 'abc'$'\t''de.deb' 
epson-printer-utility   1.0.2-1lsb3.2
1
28.04.2021, 23:30

Теги

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