Bash 将*expression*保存到shell变量,而不是表达式的*result*

Bash 将*expression*保存到shell变量,而不是表达式的*result*,bash,shell,environment-variables,sh,zsh,Bash,Shell,Environment Variables,Sh,Zsh,问题: 我想通过键入$latest在下载文件夹中获取最新的csv文件。当我取消引用$LATEST时,我希望看到放入其中的最后一个csv文件 我所尝试的: 'ls-t$DL/*.csv | head-1'(这项工作) export$LATEST='ls-t$DL/*.csv | head-1' 2的问题。它总是在运行导出时返回最新的文件。(例如old.csv)当我添加一个新文件(例如new.csv)时,我希望$LATEST显示new.csv而不是old.csv变量不会跟踪系统状态的更改。他们有价值

问题

我想通过键入
$latest
在下载文件夹中获取最新的csv文件。当我取消引用
$LATEST
时,我希望看到放入其中的最后一个csv文件

我所尝试的

  • 'ls-t$DL/*.csv | head-1'
    (这项工作)
  • export$LATEST='ls-t$DL/*.csv | head-1'

  • 2的问题。它总是在运行导出时返回最新的文件。(例如
    old.csv
    )当我添加一个新文件(例如
    new.csv
    )时,我希望
    $LATEST
    显示
    new.csv
    而不是
    old.csv

    变量不会跟踪系统状态的更改。他们有价值观。这些值会一直存在,直到您更改它们为止。如果希望像变量一样访问当前状态,请使用函数。例如:

    latest() {
        ls -t $DL/*.csv | head -1
    }
    
    echo "The latest file is $(latest)"
    if [ "new.csv" = "$(latest)" ]; then
        echo "Hooray, new is latest!"
    fi
    
    另一个好处是函数可以接受参数。例如,如果您想使您的
    最新
    函数通用,但具有合理的默认值,则可以执行以下操作:

    latest() {
        ls -t ${1:-$DL}/*.csv | head -${2:-1}
    }
    latest # show the 1 latest file from $DL directory
    latest /tmp # show the 1 latest file from /tmp
    latest /tmp 5 # show the five latest files from /tmp
    

    在这种情况下,变量不跟踪系统状态的变化。他们有价值观。这些值会一直存在,直到您更改它们为止。如果希望像变量一样访问当前状态,请使用函数。例如:

    latest() {
        ls -t $DL/*.csv | head -1
    }
    
    echo "The latest file is $(latest)"
    if [ "new.csv" = "$(latest)" ]; then
        echo "Hooray, new is latest!"
    fi
    
    另一个好处是函数可以接受参数。例如,如果您想使您的
    最新
    函数通用,但具有合理的默认值,则可以执行以下操作:

    latest() {
        ls -t ${1:-$DL}/*.csv | head -${2:-1}
    }
    latest # show the 1 latest file from $DL directory
    latest /tmp # show the 1 latest file from /tmp
    latest /tmp 5 # show the five latest files from /tmp
    

    在这种情况下,环境变量不会自动更新,它只存储值。但是您可以定义一个函数,该函数将从1计算表达式。每次你叫它:

    function latest {
      ls -t $DL/*.csv | head -1
    }
    

    现在,如果将其放入
    ~/.bashrc
    并重新加载,则可以调用
    latest
    来计算表达式并获得结果。

    环境变量不会自动更新,它只存储值。但是您可以定义一个函数,该函数将从1计算表达式。每次你叫它:

    function latest {
      ls -t $DL/*.csv | head -1
    }
    

    现在,如果您将其放入
    ~/.bashrc
    并重新加载,您可以调用
    最新的
    来计算表达式并获得结果。

    如果您可以使用
    zsh
    ,则更容易:

    $ latest () { print "$DL"/*.csv(om[1]) }
    
    glob限定符
    om
    按日期对
    “$DL”/*.csv
    的扩展进行排序;
    [1]
    在排序扩展的第一个元素上进行选择


    这避免了对包含换行符的文件名的任何担心,这也是理论上应该避免解析
    ls
    的输出的原因。

    如果可以使用
    zsh
    ,则更容易:

    $ latest () { print "$DL"/*.csv(om[1]) }
    
    glob限定符
    om
    按日期对
    “$DL”/*.csv
    的扩展进行排序;
    [1]
    在排序扩展的第一个元素上进行选择

    这避免了对包含换行符的文件名的任何担心,这就是为什么理论上应该避免解析
    ls
    的输出的原因