我对bash脚本完全不熟悉。在使用它作为我的实际要求之前,我正在尝试做一些非常基本的事情。我编写了一个简单的代码,它应该打印test code
与文件夹中文件数一样多的次数。
我的代码:
for variable in `ls test_folder`; do
echo test code
done
" test_folder"是一个文件夹,它存在于bash.sh文件所在的同一目录中。
问题:如果文件数为1,则会打印一次,但如果文件数超过1,则会打印不同的计数。例如,如果" test_folder"中有2个文件。然后,test code
被打印3次。
答案 0 :(得分:2)
只需使用shell模式(又名glob):
for variable in test_folder/*; do
# ...
done
您必须调整代码,以弥补variable
包含test_folder/foo.txt
而非foo.txt
之类的事实。幸运的是,这很容易;一种方法是用
variable=${variable#test_folder/}
删除glob引入的前导目录。
答案 1 :(得分:1)
永远不要遍历ls
的输出!由于word splitting文件名称中包含空格将是一个问题。当然,您可以将IFS
设置为$ \n
,但UNIX中的文件也可以在其名称中添加换行符。
改为使用find
:
find test_folder -maxdepth 1 -mindepth 1 -exec echo test \;
答案 2 :(得分:0)
这应该有效:
cd "test_folder"
for variable in *; do
#your code here
done
cd ..
variable
将仅包含文件名