Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
bash脚本中的for循环_Bash_Ubuntu - Fatal编程技术网

bash脚本中的for循环

bash脚本中的for循环,bash,ubuntu,Bash,Ubuntu,我完全不熟悉bash脚本。我正在尝试做一些真正基本的事情,然后再将其用于我的实际需求。我已经写了一个简单的代码,它应该打印测试代码,打印的次数与文件夹中的文件数相同 我的代码: for variable in `ls test_folder`; do echo test code done “test_folder”是存在于bash.sh文件所在的同一目录中的文件夹 问题:如果文件数为1,则打印一次,但如果文件数大于1,则打印不同的计数。例如,如果“test_folder”中有2个文件

我完全不熟悉bash脚本。我正在尝试做一些真正基本的事情,然后再将其用于我的实际需求。我已经写了一个简单的代码,它应该打印
测试代码
,打印的次数与文件夹中的文件数相同

我的代码:

for variable in `ls test_folder`; do
    echo test code
done
“test_folder”是存在于bash.sh文件所在的同一目录中的文件夹


问题:如果文件数为1,则打印一次,但如果文件数大于1,则打印不同的计数。例如,如果“test_folder”中有2个文件,那么,
test code
将被打印3次。

切勿在
ls
的输出上循环!因为文件名中有空格,这将是一个问题。当然,您可以将
IFS
设置为$
\n
,但UNIX中的文件名称中也可以有换行符

使用
find

find test_folder -maxdepth 1 -mindepth 1 -exec echo test \;
只需使用shell模式(也称为glob):

您必须调整代码以补偿
variable
将包含类似
test\u文件夹/foo.txt
的内容,而不仅仅是
foo.txt
。幸运的是,这相当容易;一种方法是使用

variable=${variable#test_folder/}
要除去glob引入的前导目录,应该执行以下操作:

cd "test_folder"
for variable in *; do
#your code here
done
cd ..

变量
将只包含文件名

您的两个文件中是否有一个文件名中有空格?其中一个文件的名称中是否有
*
或其他全局字符?请参阅和,了解此方法存在问题的原因。是的,我的一个文件的名称中有一个空格。我想这就是问题的原因。很抱歉,我尝试了很多搜索,但我完全是在错误的方向是的,空间是“问题”,因为循环看到这两个“单词”分别是出于我给出的链接中列出的所有原因。顺便说一句,如果我在test_文件夹中有“1.txt”和“2.txt”作为我的文件,我将面临同样的问题。我正在阅读您提供的链接,但我不确定这是否也是由于相同的原因或其他原因造成的。如果您文件夹中的文件实际上是
1.txt
2.txt
,那么帖子中的循环应该可以正常工作。(将
echo“$variable”
添加到循环中,以查看每个循环的运行情况。)但这仍然不是一个好主意。即使使用
variable=${variable\test\u folder/}
启动循环体,我也面临同样的问题。文件夹中有两个.txt文件,但代码打印了3次。正如问题的注释所示,您有3个文件,即使您只知道其中的两个。过滤emacs备份的一个选项是使用更具体的模式,如
test\u folder/*.txt
cd "test_folder"
for variable in *; do
#your code here
done
cd ..