Я считаю, что это делает то, что вы хотите. Все аргументы будут помещены в одну строку, разделенные пробелами, с одинарными кавычками:
str="'$*'"
$*
создает все аргументы скрипта, разделенные первым символом, $IFS
который по умолчанию является пробелом.
Внутри строки в двойных кавычках нет необходимости экранировать одинарные кавычки.
пример
Давайте поместим вышеупомянутое в файл сценария:
$ cat script.sh
#!/bin/sh
str="'$*'"
echo "$str"
Теперь запустите скрипт с примерами аргументов:
$ sh script.sh one two three four 5
'one two three four 5'
Этот скрипт POSIX. Это будет работать, bash
но это не требует bash
.
Вариант: конкатенация с косыми чертами вместо пробелов
Мы можем перейти от пробела к другому символу, настроив IFS
:
$ cat script.sh
#!/bin/sh
old="$IFS"
IFS='/'
str="'$*'"
echo "$str"
IFS=$old
Например:
$ sh script.sh one two three four
'one/two/three/four'
cd "$*"
это будет достаточно хорошо.cdm(){ str="$*"; cd "$str"; }
или, как говорит Скоттcdm(){ cd "$*"; }
. Также помните, что$*
заменяет несколько последовательных пробелов одним пробелом. Если в имени вашего каталога может быть несколько последовательных пробелов, табуляции или новых строк, то эти символы действительно необходимо экранировать, прежде чем они будут переданы вcdm
функцию.cdm
как в:cdm 'test 2 trial 1'
. Это будет обрабатывать все поместье странных имен. Однако, если пробелы ограничены одиночными пробелами,cdm
тогда он может быть запущен какcdm test 2 trial 1
.Это проще, чем вы думаете
chmod + x и запустите:
источник