Ответ 1
Проверьте справочную страницу bash
для записи для '*' в разделе Специальные параметры.
join () {
echo "$*"
}
Я пытаюсь написать функцию, которая принимает n параметров и присоединяет их к строке.
В Perl это будет
my $string = join(' ', @ARGV);
но в bash Я не знаю, как это сделать
function()
{
??
}
Проверьте справочную страницу bash
для записи для '*' в разделе Специальные параметры.
join () {
echo "$*"
}
Для немедленного вопроса chepner answer ("$*"
) проще всего, но как пример того, как это сделать, обращаясь к каждому аргументу по очереди:
func(){
str=
for i in "[email protected]"; do
str="$str $i"
done
echo ${str# }
}
Это ведет себя как Perl join
:
#!/bin/bash
sticker() {
delim=$1 # join delimiter
shift
oldIFS=$IFS # save IFS, the field separator
IFS=$delim
result="$*"
IFS=$oldIFS # restore IFS
echo $result
}
sticker , a b c d efg
Вышеуказанные выходы:
a,b,c,d,efg
Подобно perreal-ответу, но с подоболочкой:
function strjoin () (IFS=$1; shift; echo "$*");
strjoin : 1 '2 3' 4
1:2 3:4
Соединение Perl может разделяться более чем одним символом и достаточно быстро используется с bash (напрямую или с помощью псевдонима или обертки функций)
perl -E 'say join(shift, @ARGV)' ', ' 1 '2 3' 4
1, 2 3, 4