首页 > 解决方案 > 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

有谁知道如何解决/解释这个?

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

谢谢你的努力

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

标签: bash

解决方案


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

更有可能的是,文件数量/tmp自然会随着时间而变化,并且您假设恰好存在相关性的因果关系。

实现这一点的更好方法是避免使用数组解析ls输出

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

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

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

打印出参数的数组或列表应该会显示哪些文件确实存在。

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


推荐阅读