我将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
有人知道如何解决/解释这个问题吗?
我很困惑,去网上寻找答案,但是我找不到任何正要问这个问题的原因
感谢您的努力
很抱歉有任何拼写错误。我来自荷兰。
答案 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"
打印出数组或参数列表应显示出确切存在的文件。
顺便说一句,不要对您的私有变量使用大写;大写变量名保留给系统变量使用。