find example -name \*.txt | sed 's/\.txt$//' | xargs -n 1 mkdir
Предупреждение: для этого необходимо, чтобы ваши пути не содержали символы новой строки.
Изменить: см. Комментарий Тердона, если вы используете инструменты GNU.
Вы можете изменить сценарий на
#!/bin/sh
echo "$*"
«$ *»
расширяется до одной строки, которая состоит из всех аргументов, переданных в строку, соединены с пробелом между каждым аргументом. Таким образом,
$ ./script 1 2 3
1 2 3
Но это не передает то, что буквально следует за именем сценария в командной строке. Это было бы невозможно. Например, несколько пробелов сжимаются вместе, поскольку они просто разделяют аргументы:
$ ./script 1 2 3
1 2 3
Специальные символы оболочки по-прежнему расширяются.
$ ./script 2 * 2
2 bin dev etc home lib lost+found proc run sbin tmp sys usr var 2
$ ./script hello ; world
hello
bash: world: command not found
Вы не можете использовать это для передачи переменной в скрипт без кавычек, так как это сначала разделяет значение переменной на пробел, затем расширяет символы подстановки, которые соответствуют хотя бы одному имени файла, и, наконец, объединяет результаты .
$ foo='2 * 2'
$ ./script $foo
2 bin dev etc home lib lost+found proc run sbin tmp sys usr var 2
Этот сценарий:
#!/bin/sh
echo $@
производит:
$ ./test.sh 1 23 4 5 6
$ 1 23 4 5 6