Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.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中将half命令分配给变量_Linux_Bash - Fatal编程技术网

Linux 如何在bash中将half命令分配给变量

Linux 如何在bash中将half命令分配给变量,linux,bash,Linux,Bash,这个命令运行良好 find . -name "test" 但我想在shell脚本中这样做 $FIND = "find . -name " 这样我就可以使用$FIND“test” 但它不起作用想想下面的说法: $Find = "find . -name " 这有两个问题: shell要求赋值中的=周围没有空格 $Find是变量的值。它不是变量本身 因此,要将值分配给查找,请使用: Find="find . -name " 无法运行: $Find test 这种方法是可移植的,但有局限性。

这个命令运行良好

find . -name "test"
但我想在shell脚本中这样做

$FIND = "find . -name "
这样我就可以使用
$FIND“test”


但它不起作用

想想下面的说法:

$Find = "find . -name "
这有两个问题:

  • shell要求赋值中的
    =
    周围没有空格

  • $Find
    是变量的值。它不是变量本身

  • 因此,要将值分配给
    查找
    ,请使用:

    Find="find . -name "
    
    无法运行:

    $Find test
    
    这种方法是可移植的,但有局限性。从长远来看,最好使用数组来解决这类问题

    最后,最好不要对变量名使用所有的大写字母。系统对其变量使用所有大写字母,您不希望意外地覆盖其中一个

    使用数组 可以为此定义一个数组,如下所示:

    Find=(find . -name)
    
    "${Find[@]}" test
    
    该阵列可按如下方式使用:

    Find=(find . -name)
    
    "${Find[@]}" test
    
    对于您展示的简单示例,数组解决方案和简单变量解决方案之间没有区别。但是,一旦命令变得更复杂,需要引号或转义符,就必须使用数组

    见。简短总结:根据您实际要完成的任务,使用函数或数组

    对于您的特定示例,我将使用一个函数:

    find_name() {
        find . -name "$1"
    }
    
    find_name "test"
    

    如何使用
    eval
    ?如果需要使用变量,这似乎是最简单的方法。它可能是这样的:

    find="find . -name"
    eval $find test
    
    但是你应该

    无论如何,别名函数会更好,如果您对变量没有任何特殊要求。Alias绝对是最简单的方法,功能更灵活(您可以将任何需要的逻辑放在那里):


    怎么不工作?也许可以删除
    =
    运算符周围的空格。如何在此场景中使用数组我用数组示例更新了答案。更详细地说,Gordon引用的是一个很好的资源。函数比数组更好。好的,太好了,那就使用别名吧。它的设计正是为了满足你的需要。为此目的使用变量是非常奇怪的,因此没有直接的方法来执行变量中的内容。或者别名,只要参数在末尾。@paxdiablo也行。我倾向于选择函数而不是别名,因为它们在脚本中工作,并且以交互方式工作,并且它们对参数提供了更多的控制——在本例中,我认为这两种方法都不相关,所以别名应该可以。