不能在bash中增加一个variables

不能在bash中增加一个variables,第1张

概述不能在bash中增加一个variables

我正在尝试创build一个脚本来计算运行该脚本的文件夹中隐藏和非隐藏文件的数量。 但是,我碰到一个问题,我不能增加variables。

#!/bin/bash #A simple script to count the number of hIDden and non-hIDden files in the folder this script is run in #Variables to store the number of hIDden and non-hIDden files and folders #Variables with a 'h' at the end represent hIDden items files=0 fileh=0 #List all files and folders #Use grep to folder entrIEs beginning with '-',which are files #Return the 9th word in the string which is the filename #Read the filename into the variable 'fls' ls -al | grep ^- | awk '{print $9}' | while read fls #If the filename begins,with a dot,it is a hIDden file do if [[ $fls == .* ]] then #Therefore increment the number of hIDden files by one let fileh++ else #Else,increment the number if non-hIDden files by one let files++ fi done #Print out the two numbers echo $files 'non-hIDden files' echo $fileh 'hIDden files' #When I run this script,the output is always zero for both variables #I don't kNow why this doesn't work?!

这个脚本的输出如下:

jai@L502X~$ ./script.sh 0 non-hIDden files 0 hIDden files

windows:复制文件直到文件不存在

在文件中find的每一行的增加(第一个)数字都是1

在|的右侧会发生什么? 发生在一个子shell。 子shell中对变量的更改不会传播回父shell。

常见的解决方法:不要使用管道,使用流程替换:

while read fls ; do ... done < <(ls -al | grep ^- | awk '{print $9}')

如果你想使用let增加一个变量,你必须引用你的表达式,就像

let "i++"

但是,我个人更喜欢使用双括号语法

((i++)) # or,if you want a pre-fixed increment ((++i))

另外,可以使用&&和||来为if语句使用更短的语法 :

[[ $fls == .* ]] && ((++fileh)) || ((++files))

不是“增量”问题的答案,而是一个更简单的脚本来做你正在做的事情:

files=`find . -type f` echo "non-hIDden files " `echo "$files" | egrep -v "[/].[^/]+$" | wc -l` echo "hIDden files " `echo "$files" | egrep "[/].[^/]+$" | wc -l`

引用可变增量

let "fileh++"

总结

以上是内存溢出为你收集整理的不能在bash中增加一个variables全部内容,希望文章能够帮你解决不能在bash中增加一个variables所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1278466.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-09
下一篇 2022-06-09

发表评论

登录后才能评论

评论列表(0条)

保存