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
的输出的原因