Что делает `set -o keyword` в bash?

Если 30000 файлов расположены в dir, который является подкаталогом текущего каталога:

xargs -I XX cat dir/XX <file1 >result.txt

Это объединит файлы, перечисленные в file1, и запишет результат в файл с именем result.txt.

xargsпрочитает имена файлов из file1и выполнит catдля каждого файла.-I XXуказывает xargsзаменить XXв команде cat dir/XXименем файла.

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

cd dir
xargs cat <../file1 >../result.txt

, что может быть быстрее, но дает тот же результат. Разница в том, что вместо того, чтобы запускать catодин раз для каждого файла по отдельности, catвызывается с максимально возможным количеством имен файлов.

-1
27.01.2020, 15:14
1 ответ

Обычно, чтобы внедрить переменную окружения для команды, вы помещаете присвоение имени перед командой, подобной этой:

VARIABLE=value bash -c 'echo "$1 $VARIABLE"' bash hello

Это запускает bash -c 'echo "$VARIABLE"' bash helloи устанавливает VARIABLEв строку valueв среде этой команды. В этом случае команда напечатает hello value(, где helloисходит из первого аргумента командной строки скрипта строки -, а valueисходит из переменной окружения ).

Сset -o keyword(илиset -kbash(это не -стандартная опция оболочки ), назначение может происходить в любом месте командной строки:

$ set -k
$ bash -c 'echo "$1 $VARIABLE"' bash hello VARIABLE=value
hello value
$ bash -c 'echo "$1 $VARIABLE"' bash VARIABLE=value hello
hello value
$ bash -c 'echo "$1 $VARIABLE"' VARIABLE=value bash hello
hello value
$ bash -c VARIABLE=value 'echo "$1 $VARIABLE"' bash hello
hello value
$ bash VARIABLE=value -c 'echo "$1 $VARIABLE"' bash hello
hello value

Я никогда не видел, чтобы эта опция использовалась «в дикой природе», и я предполагаю, что она используется очень редко при очень специфических обстоятельствах, поскольку она радикально меняет способ анализа команд.

4
28.01.2020, 05:07

Теги

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