Это использует один конвейер и кажется довольно быстрым, но имеет ограничение, заключающееся в том, что все файлы имеют одинаковый размер
dd if=/dev/urandom bs=1024 count=10240 | split -a 4 -b 1k - file.
Пояснение :Используйте dd для создания 10240 *1024 байт данных; разбить это на 10240 отдельных файлов по 1 КБ каждый (имена будут идти от 'file.aaaa' до 'file.zzzz')
Это стандартная функция. Вы можете установить переменную при запуске команды, и тогда переменная будет установлена для команды. Это также работает в показанном вами примере foo='hello' echo $foo
. Проблема в том, что вы тестируете неправильно. Когда вы запустите это:
foo='hello' echo $foo
Оболочка расширит переменную до запуска команды. Поскольку foo
на самом деле не устанавливается при запуске, это становитсяecho
(эхом ничего ). Вы можете увидеть это с помощьюset -x
:
$ set -x
$ foo='hello' echo $foo
+ foo=hello
+ echo
Теперь сравните это с тем, что произойдет, если вы вместо этого используете небольшой скрипт, чтобы ваша оболочка не видела эту переменную:
$ cat ~/scripts/foo.sh
+ cat /home/terdon/scripts/foo.sh
#!/bin/bash
echo "The value of foo is:$foo"
Используйте это для отображения переменной, и вы получите:
$ foo='hello' ~/scripts/foo.sh
+ foo=hello
+ /home/terdon/scripts/foo.sh
hello
Вы можете сделать то же самое, если вы вызовете bash -c
и заключите команду, которую вы ей даете, в одинарные кавычки, чтобы переменная была защищена и не расширялась вашей текущей оболочкой перед вызовомbash -c
:
$ foo='hello' bash -c 'echo $foo'
hello
Хотя это не удается, потому что двойные кавычки означают, что $foo
расширяется до того, как bash -c
его увидит:
$ foo='hello' bash -c "echo $foo"
$
Поведение описано в man bash
в разделе «ОКРУЖАЮЩАЯ СРЕДА» :
The environment for any simple command or function may be augmented
temporarily by prefixing it with parameter assignments, as described
above in PARAMETERS. These assignment statements affect only the envi‐
ronment seen by that command.
Также подробно описано в руководстве:3.7.1 Расширение простой команды