Как обойти подстановочные знаки внутри двойных кавычек?

Вы можете использовать awkи оставить только нужные поля:

echo -e "abc def bac 123\nabc def def bac 123\nabc def def def bac 123 123" \
  | awk -v var1="def" -v var2="123" '{
  i=0
  for (j=1; j<=NF; j++){
    if ($j==var1 || $j==var2){ $++i=$j }
    if (i!=j){ $j="" }
  }
  print
}'

Это перебирает поля в цикле for -и переназначает defили 123следующему полю $++i=$j(, начиная с индекса 0, поэтому первое поле равно 1, следующее — 2... )и сбрасывает текущее поле $jв пустую строку ($j=""), если индекс iне является индексом цикла j.

Выход:

def 123
def def 123
def def def 123 123
1
28.11.2020, 20:20
1 ответ

Просто снимите глобус из кавычек.

myscript.sh "0$i"*".pdf"

Похоже, вы обеспокоены тем, что *превратится в строку, содержащую пробелы, b? Это не проблема, после расширения пути (, известного как подстановка ), пробелы теряют свое синтаксическое значение и становятся буквальными.

См. пример выполнения:

$ ls -1
'01a b.pdf'
'01e f.pdf'
'02c d.pdf'
myscript.sh

$ cat myscript.sh
#!/bin/sh
for file in "$@"; do
    echo "$file"
done

$ i=1

$./myscript.sh "0$i"*".pdf"
01a b.pdf
01e f.pdf
3
18.03.2021, 22:46

Теги

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