Понимание списка карт или карта - PullRequest
2 голосов
/ 28 мая 2019

Скажем, у меня есть строка в bash -

NAMES="file1 file2 file3"

Как мне сопоставить ее со следующей строкой, которую я затем буду использовать как часть команды?

MAPPED="-i file1.txt -i file2.txt -i file3.txt"

Для примера того, что я имею в виду, вот эквивалентный код Python -

names = "file1 file2 file3"
mapped = ' '.join("-i " + x + ".txt" for x in names.split())

1 Ответ

6 голосов
/ 29 мая 2019

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

names=(file1 file2 file3)

# Add suffix
names=("${names[@]/%/.txt}")

# Build new array with "-i" elements
for name in "${names[@]}"; do
    mapped+=(-i "$name")
done

# Show result
declare -p mapped

в результате получается:

declare -a mapped=([0]="-i" [1]="file1.txt" [2]="-i" [3]="file2.txt" [4]="-i" [5]="file3.txt")

Теперь это можно использовать в таких командах:

cmd "${mapped[@]}"

См. BashFAQ / 050 относительно обоснования размещения команд в строках вместо массивов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...