连接函数的所有参数的好方法是什么?
我目前得到的是迭代它们并连续附加它们:
func(){
concat=
for arg in "$@"
do
concat=$concat$arg
done
echo $concat
}
我想可能做类似的事情:
another_func() {
echo $(remove_spaces $@)
}
连接函数的所有参数的好方法是什么?
我目前得到的是迭代它们并连续附加它们:
func(){
concat=
for arg in "$@"
do
concat=$concat$arg
done
echo $concat
}
我想可能做类似的事情:
another_func() {
echo $(remove_spaces $@)
}
此函数使用
"$*"
(双引号很重要),它将扩展为单个字符串,其中位置参数(参数)的值与$IFS
作为分隔符的第一个字符的值连接。我们设置
IFS
为一个空字符串,这意味着"$*"
将扩展到所有没有分隔符的连接的参数。另请注意,我们
$IFS
通过将其包含在子shell( ... )
而不是通常的{ ... }
.在另一个函数中,对该函数的调用可能看起来像
或更短,而不实际调用
concat
函数:要删除参数列表中的所有空格,请使用
例如,
测试:
对于使用基于您的第二个示例的方法的少量资源快速解决方案:
通过这种方式,您将完全删除所有空格。但是,如果您打算让参数包含空格,请记住@kusalananda 的方法。
在
zsh
shell 中,您可以使用j:separator:
参数扩展标志以任意分隔符连接数组的元素。所以你可以这样做:或者
连接
$argv
aka$@
数组的元素,而无需修改全局参数,如$IFS
.如果只是打印参数,使用类似 Bourne 的 shell,你总是可以这样做:
and的
printf
内建函数也可以将结果存储在一个变量中:bash
zsh
使用
fish
外壳,您可以使用:(如果
$argv
是一个空列表,它会打印一个空行)。