bash脚本中命令的输出与普通命令不同

时间:2019-04-01 17:52:19

标签: bash

我将opensuse用作笔记本电脑上的虚拟机。 这个问题是关于我需要做家庭作业的代码。

我需要制作一个带有变量的脚本,以显示目录中条目的数量。

当我在bash脚本中编写确切的命令时,其输出与直接从CLI运行时的输出有所不同

#! /bin/bash

clear

ENTRIES=$(ls /tmp | wc -l)

echo "the amount of entries is" "$ENTRIES"

当我运行此脚本时,输出为53

但是当我在终端/ CLI中键入命令“ ls / tmp | wc -l”时,我得到61

有人知道如何解决/解释这个问题吗?

我很困惑,去网上寻找答案,但是我找不到任何正要问这个问题的原因

感谢您的努力

很抱歉有任何拼写错误。我来自荷兰。

1 个答案:

答案 0 :(得分:1)

可以通过创建临时文件的方式来实现命令替换。

/tmp中的文件数很可能会随时间自然变化,并且您推测恰好存在相关性的原因。

一种更好的实现方法避免使用任何数组parsing ls output

#!/bin/bash
tmpfiles=(/tmp/*)
echo "$(#tmpfiles[@]} files in /tmp"

或仅枚举可移植到POSIX sh的文件:

#!/bin/sh
set -- /tmp/*
echo "$# files in /tmp"

打印出数组或参数列表应显示出确切存在的文件。

顺便说一句,不要对您的私有变量使用大写;大写变量名保留给系统变量使用。