gzip
делает это. Цитата из справочной страницы :
Gzip уменьшает размер именованных файлов, используя кодировку Lempel-Ziv (LZ77). По возможности каждый файл заменяется файлом с расширением
.gz
, сохраняя при этом те же режимы владения, доступа и времени изменения. (Расширение по умолчанию --gz
для VMS, z для MSDOS, OS / 2 FAT, Windows NT FAT и Atari.) Если файлы не указаны или если {{ 1}} имя файла - "-", стандартный ввод сжимается до стандартного вывода . Gzip будет пытаться сжимать только обычные файлы. В частности, он игнорирует символические ссылки.
Конечно, есть и другие. Обычно для Unix / Unix-подобных систем фильтрует стандартный ввод на вывод. Термин «фильтр» охватывает множество возможностей; сжатие и декомпрессия - это лишь некоторые из них.
Один из способов сделать это:
#! /bin/sh
VAR1="abc def ghi"
VAR2="1 2 3"
fun()
{
set $VAR2
for i in $VAR1; do
echo command "$i" "$1"
shift
done
}
fun
Выход:
command abc 1
command def 2
command ghi 3
Ниже приводится одно из решений.
#!/bin/sh
var1="a b c"
var2="1 2 3"
set -- $var2
for i in $var1
do
echo $i $1
shift
done
Вариация ответа Сато Кацуры(здесь, автономная -замкнутая функция):
func () {
var=$1
set -- $2
for arg1 in $var; do
printf 'command %s %s\n' "$arg1" "$1" # or cmd "$arg1" "$1" directly
shift
done
}
func "abc def ghi" "1 2 3"
Следующее будет работать, но перезапишет позиционные параметры скрипта, в котором он находится:
var1="abc def ghi"
var2="1 2 3"
set -- $var2
for arg1 in $var1; do
printf 'command %s %s\n' "$arg1" "$1"
shift
done