无法将命令输出分配给变量

无法将命令输出分配给变量

我正在尝试分配从下面的 ls 命令获取的最新文件名,但是出现了一些错误,如果有人能回答我该如何解决这个问题就太好了!

fn=`ls -lrt pur_bom_interface_daily*.log | cut -c59-102 | tail -1`

或者

fn=$(ls -lrt pur_bom_interface_daily*.log | cut -c59-102 | tail -1)

错误出现:

ls: 0653-341 The file pur_bom_interface_daily*.log does not exist

注意:pur_bom_interface_daily*.log 我之所以使用,是*因为有多个文件的名称以创建日期开头pur_bom_interface_daily,并与创建日期连接。

答案1

除非当前工作目录中不存在 pur_bom_interface_daily*.log 文件,否则第二行脚本应该可以正常工作。为了证明这一点,请尝试以下示例代码块:

mkdir logfiles
cd logfiles
touch log-{1..4}.log
fn=$(ls -lrt log-*.log)
echo "$fn"

最后一个命令的结果应该列出您使用创建的 4 个新日志文件touch

如果您将第四行替换为以下内容,示例代码块也应该可以正常工作:

fn=$(ls -lrt log-*.log | cut -c1-59 | tail -4)

...尽管您可能必须将其更改59为不同的数字,以使每行的输出具有有意义的长度(59 是上面代码行中每行输出的长度)。

答案2

使用反引号会将所有 stdout 分配给变量,每个参数之间都有空格,文件名中的空格会搞砸这一点。要将第一个或最后一个管道放入头部或尾部,请尝试:

fn=`ls -rt -1 * | tail -1`

选项-1onls表示每行一个文件。选项-1ontail表示仅限最后一行。

相关内容