Как выполнить итерацию двух переменных в сценарии sh?

gzip делает это. Цитата из справочной страницы :

Gzip уменьшает размер именованных файлов, используя кодировку Lempel-Ziv (LZ77). По возможности каждый файл заменяется файлом с расширением .gz , сохраняя при этом те же режимы владения, доступа и времени изменения. (Расширение по умолчанию - -gz для VMS, z для MSDOS, OS / 2 FAT, Windows NT FAT и Atari.) Если файлы не указаны или если {{ 1}} имя файла - "-", стандартный ввод сжимается до стандартного вывода . Gzip будет пытаться сжимать только обычные файлы. В частности, он игнорирует символические ссылки.

Конечно, есть и другие. Обычно для Unix / Unix-подобных систем фильтрует стандартный ввод на вывод. Термин «фильтр» охватывает множество возможностей; сжатие и декомпрессия - это лишь некоторые из них.

2
19.09.2017, 23:48
3 ответа

Один из способов сделать это:

#! /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
7
27.01.2020, 21:49

Ниже приводится одно из решений.

#!/bin/sh
var1="a b c"
var2="1 2 3"
set -- $var2
for i in $var1
do
    echo $i $1
    shift
done
1
27.01.2020, 21:49

Вариация ответа Сато Кацуры(здесь, автономная -замкнутая функция):

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
6
27.01.2020, 21:49

Теги

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