Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何在自定义bash函数中作为dir路径的一部分传递参数?_Linux_Bash_Shell_Terminal_Command - Fatal编程技术网

Linux 如何在自定义bash函数中作为dir路径的一部分传递参数?

Linux 如何在自定义bash函数中作为dir路径的一部分传递参数?,linux,bash,shell,terminal,command,Linux,Bash,Shell,Terminal,Command,我想定义一个自定义bash函数,它获取一个参数作为dir路径的一部分 我不熟悉bash脚本。网上提供的代码让我有些困惑,或者工作不正常 例如,预期的bash脚本如下所示: 功能我的拷贝{ sudo cp~/workspace/{$1}~/tmp/{$2} } 如果我输入我的副本a b 然后我希望函数执行sudo cp~/workspace/a~/tmp/b 在候机楼 提前感谢。如果您在say copy.sh文件中具有以下功能,并且您使用的是source copy.sh或。sh则函数调用my_co

我想定义一个自定义bash函数,它获取一个参数作为dir路径的一部分

我不熟悉bash脚本。网上提供的代码让我有些困惑,或者工作不正常

例如,预期的bash脚本如下所示:

功能我的拷贝{ sudo cp~/workspace/{$1}~/tmp/{$2} } 如果我输入我的副本a b

然后我希望函数执行sudo cp~/workspace/a~/tmp/b 在候机楼


提前感谢。

如果您在say copy.sh文件中具有以下功能,并且您使用的是source copy.sh或。sh则函数调用my_copy将按预期工作

1美元和2美元是免费的

i、 e.当您调用my_copy a b时,$1的值为第一个命令行参数,在您的示例中为a,而$2的值为第二个命令行参数,为b。该功能将按预期工作

函数中还有一个逻辑错误,您给出了{$1}而不是${1}。它将扩展到{a}而不是函数中的,并且它将抛出一个错误,显示cp:cannot stat“~/workspace/{a}”:运行它时没有这样的文件或目录

此外,如果位置参数的数量大于10,则只需要在两者之间使用{},否则可以避免使用它。例如:${11}而不是11美元

因此,上述函数将按预期执行语句sudo cp~/workspace/a~/tmp/b


要理解这个概念,可以在脚本中尝试echo$1、echo${1}、echo{1}、echo{2}、echo${2}和echo$2,以查看结果值

如果您在say copy.sh文件中有下面的函数,并且如果您使用了source copy.sh或。sh则函数调用my_copy将按预期工作

1美元和2美元是免费的

i、 e.当您调用my_copy a b时,$1的值为第一个命令行参数,在您的示例中为a,而$2的值为第二个命令行参数,为b。该功能将按预期工作

函数中还有一个逻辑错误,您给出了{$1}而不是${1}。它将扩展到{a}而不是函数中的,并且它将抛出一个错误,显示cp:cannot stat“~/workspace/{a}”:运行它时没有这样的文件或目录

此外,如果位置参数的数量大于10,则只需要在两者之间使用{},否则可以避免使用它。例如:${11}而不是11美元

因此,上述函数将按预期执行语句sudo cp~/workspace/a~/tmp/b


要理解这个概念,可以在脚本中尝试echo$1、echo${1}、echo{1}、echo{2}、echo${2}和echo$2,以查看结果值

代码中存在语法错误。您不能调用像{$foo}这样的变量。如果1=a和2=b,则执行

sudo cp~/workspace/{$1}~/tmp/{$2}

BASH将用a替换$1,用b替换$2,因此,BASH将执行

sudo cp~/workspace/{a}~/tmp/{b}

这意味着,由于没有像{a}这样名称的文件,因此该cp将失败

有几种方法可以调用变量

回声$foo

echo${foo}

回声$foo

echo${foo}

否则,您的代码看起来不错,应该可以工作

看看这个链接,引用变量是非常重要的。若你们想了解更多关于BASH的信息,或者晚上睡不着,试试吧,它有你们必须知道的关于BASH的一切,它也是一种很好的催眠药


PS:我知道$1、$2等是位置参数,我称之为变量,因为您将其视为变量,我的anwser可以同时应用于这两个参数。

您的代码中存在语法错误。您不能调用像{$foo}这样的变量。如果1=a和2=b,则执行

sudo cp~/workspace/{$1}~/tmp/{$2}

BASH将用a替换$1,用b替换$2,因此,BASH将执行

sudo cp~/workspace/{a}~/tmp/{b}

这意味着,由于没有像{a}这样名称的文件,因此该cp将失败

有几种方法可以调用变量

回声$foo

echo${foo}

回声$foo

echo${foo}

否则,您的代码看起来不错,应该可以工作

看看这个链接,引用变量是非常重要的。若你们想了解更多关于BASH的信息,或者晚上睡不着,试试吧,它有你们必须知道的关于BASH的一切,它也是一种很好的催眠药

PS:我知道$1、$2等是位置参数,我称之为变量,因为你把它当作一个变量,我的anwser可以同时应用于这两个参数

   function my_copy() {
        sudo cp ~/workspace/$1 ~/tmp/$2 
    }