bash - 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
有谁知道如何解决/解释这个?
我很困惑,去网上寻找答案,但我找不到任何答案,这就是我问这个问题的原因
谢谢你的努力
很抱歉有任何拼写错误。我来自荷兰。
解决方案
命令替换可能以创建临时文件的方式实现。
更有可能的是,文件数量/tmp
自然会随着时间而变化,并且您假设恰好存在相关性的因果关系。
实现这一点的更好方法是避免使用数组解析ls
输出
#!/bin/bash
tmpfiles=(/tmp/*)
echo "$(#tmpfiles[@]} files in /tmp"
或仅枚举可移植到 POSIX 的文件sh
:
#!/bin/sh
set -- /tmp/*
echo "$# files in /tmp"
打印出参数的数组或列表应该会显示哪些文件确实存在。
顺便说一句,不要对私有变量使用大写;大写变量名是为系统变量保留的。
推荐阅读
- c# - 字符串到字符串数组每个“n”个字符
- python - 有没有办法在 django 序列化程序中获取请求数据?
- python - Discord Bot 是否可以在每次不指定频道 ID 的情况下发送到特定频道
- javascript - 为什么从命令行打印到 pdf 时 google-chrome 不呈现 maxjax?
- javascript - 为什么 esm 模块没有在测试中被 jest 导入
- c++ - 为什么我的代码在 C++ 中运行“while 循环”时会导致问题?在 if else 语句中,它不断打印错误的输出
- google-earth - 无法将带有十进制度纬度/经度数据的 CSV 导入 Google 地球
- javascript - JS 显示包含 PHP 的 DOM 元素
- spring - Mongotemplate没有显示任何异常
- python - VScode 中的 Conda 环境