我正在编写一个Bash脚本,我需要在Bash脚本中传递一个包含空格的字符串到函数。
例如:
#!/bin/bash
myFunction
{
echo $1
echo $2
echo $3
}
myFunction "firstString" "second string with spaces" "thirdString"
当运行时,我期望的输出是:
firstString
second string with spaces
thirdString
然而,实际输出的是:
firstString
second
string
是否有一种方法可以将带有空格的字符串作为一个参数传递给Bash中的函数?
我遇到了同样的问题,事实上问题不在于函数本身,也不在于函数调用,而在于我传递给函数的参数。
该函数是从脚本的主体中调用的- 'main' -所以我从命令行传递"st1 a b" "st2 c d" "st3 e f",并使用myFunction $*将其传递给函数
$*会导致问题,因为它展开为一组字符,将在函数调用中使用空格作为分隔符进行解释。
解决方案是在显式参数处理中改变对函数的调用,从'main'转向函数:然后调用myFunction "$1" "$2" "$3",这将保留字符串中的空白,因为引号将分隔参数…
因此,如果一个形参可以包含空格,则应该在函数的所有调用中显式地处理它。
由于这可能是对问题进行长时间搜索的原因,因此永远不要使用$*来传递参数可能是明智的…
我遇到了同样的问题,事实上问题不在于函数本身,也不在于函数调用,而在于我传递给函数的参数。
该函数是从脚本的主体中调用的- 'main' -所以我从命令行传递"st1 a b" "st2 c d" "st3 e f",并使用myFunction $*将其传递给函数
$*会导致问题,因为它展开为一组字符,将在函数调用中使用空格作为分隔符进行解释。
解决方案是在显式参数处理中改变对函数的调用,从'main'转向函数:然后调用myFunction "$1" "$2" "$3",这将保留字符串中的空白,因为引号将分隔参数…
因此,如果一个形参可以包含空格,则应该在函数的所有调用中显式地处理它。
由于这可能是对问题进行长时间搜索的原因,因此永远不要使用$*来传递参数可能是明智的…