Вы оцениваете переменные только один раз, до l oop. Я предполагаю, что вы хотите
while read -r line; do
image_name=$(sed -e 's/-[^*]*$//' <<<"$line")
version=$(sed -e 's/[^0-9.]*//;s/\.tar$//' <<<"$line")
skopeo copy \
docker-archive:/opt/app-root/src/"$line" \
docker://private/dsop/test/"$image_name":"$version" \
--dest-creds="$USERNAME":"$PASSWORD" \
--dest-tls-verify=false
done < list_files.txt
Нет необходимости export
переменных, если они не должны быть видимы для подпроцесса (например, здесь, skopeo
- но так как вы передаете эти значения как переменные, я думаю, он не ищет и не использует переменные с этими именами); и sed -e script x
использует x
в качестве имени входного файла, а не строку для обработки. Символ da sh является обычным символом и не нуждается в обратном слэсе sh, экранированном в sed
. Наконец, не читает файлы с for
.
Синтаксис «здесь строка» <<<
имеет расширение Bash (которое также доступно в некоторых других оболочках, но не переносится на POSIX / Bourne sh
).