Shell 在unix函数中使用参数

Shell 在unix函数中使用参数,shell,unix,ksh,Shell,Unix,Ksh,我想使用函数运行脚本。脚本按原样运行良好,但希望使用函数运行,并将某些内容作为参数传递 #! /bin/ksh # # profile.ksh # # sample Korn shell profileument. Example: build(){ return /home/$1/script.sh; } 然而,当我做一些类似的事情时: $build 09272018 我得到以下错误: ksh:/home/09272018/script.sh:错误数字 有没有办法做

我想使用函数运行脚本。脚本按原样运行良好,但希望使用函数运行,并将某些内容作为参数传递

#! /bin/ksh
#
#       profile.ksh
#
#       sample Korn shell profileument. Example:

build(){
return /home/$1/script.sh;
}
然而,当我做一些类似的事情时:

$build 09272018

我得到以下错误:

ksh:/home/09272018/script.sh:错误数字

有没有办法做到这一点?我尝试过各种选择,但运气不好


谢谢大家!

不能从shell函数返回任意值,只能返回整数(通常介于0和255之间)。相反,您可以将“返回值”写入标准输出:

$ build () { echo /home/$1/script.sh; }
$ script_name=$(build 09272018)
$ echo "$script_name"
/home/09272018/script.sh
或者设置一个全局变量

$ build () { script_name=/home/$1/script.sh; }
$ build 09272018
$ echo "$script_name"
/home/09272018/script.sh

(在任何情况下,
return
返回的值都应该是退出状态,其中0表示函数成功,非零值表示函数以某种方式失败。它永远不应该用于返回数据。)

不能从shell函数返回任意值,只能返回整数(通常介于0和255之间)。相反,您可以将“返回值”写入标准输出:

$ build () { echo /home/$1/script.sh; }
$ script_name=$(build 09272018)
$ echo "$script_name"
/home/09272018/script.sh
或者设置一个全局变量

$ build () { script_name=/home/$1/script.sh; }
$ build 09272018
$ echo "$script_name"
/home/09272018/script.sh

(在任何情况下,
return
返回的值应该是退出状态,其中0表示函数成功,非零值表示函数以某种方式失败。它永远不应该用于返回数据。)

我认为您有不同的子目录,每个子目录都有一个script.sh。
类似于
${HOME}/version0\u 1/script.sh
${HOME}/johndoe/script.sh
${HOME}/version1\u 0/script.sh

现在,您需要使用参数运行正确的脚本。
您可以使用
source
(可以用点
缩写)。
当你只需要调用一个脚本时,参数是很好的,当你需要调用很多其他的时候,考虑一个变量。
$ build () { script_name=/home/$1/script.sh; }
$ build 09272018
$ echo "$script_name"
/home/09272018/script.sh
只要一个电话 或


您可能会注意到,我将该版本置于双引号中。也许有人用
${HOME}/version0.2beta3/script.sh
这样的空格创建了一个subdir。我应该把
${HOME}
也放在引号里,但是我认为你的系统管理员不会在你的homedir中放一个空格。

我认为你有一个不同的子目录,每个子目录都有一个script.sh。
类似于
${HOME}/version0\u 1/script.sh
${HOME}/johndoe/script.sh
${HOME}/version1\u 0/script.sh

现在,您需要使用参数运行正确的脚本。
您可以使用
source
(可以用点
缩写)。
当你只需要调用一个脚本时,参数是很好的,当你需要调用很多其他的时候,考虑一个变量。
$ build () { script_name=/home/$1/script.sh; }
$ build 09272018
$ echo "$script_name"
/home/09272018/script.sh
只要一个电话 或

您可能会注意到,我将该版本置于双引号中。也许有人用
${HOME}/version0.2beta3/script.sh
这样的空格创建了一个subdir。我应该把
${HOME}
也放在引号里,但是我认为你的系统管理员不会在你的homedir中放一个空格。

试试看。与StackOverflow相比,它自动检测的往返时间更快。请尝试。它比StackOverflow具有更快的往返时间。