Linux don';无法在ls do中执行文件

Linux don';无法在ls do中执行文件,linux,bash,for-loop,Linux,Bash,For Loop,我有一个脚本,它必须处理目录中的一些文件(名称以AB开头)。 代码是: for file in AB* do cp ... ... done 当文件夹中没有*.txt文件时,代码将执行1次。 但也有错误,因为我试图复制一个不存在的文件。 当ls命令的结果为空时,如何使do命令不执行 我已经试过使用ls,引用一个组合>什么都不能得到我想要的结果。你可能需要bash测试,通常缩写为[,诸如此类 if [ -f output.txt ] ; then 注意:上面的空格很重要。您可能需要ba

我有一个脚本,它必须处理目录中的一些文件(名称以AB开头)。 代码是:

for file in AB*
do
  cp ...
  ...
done
当文件夹中没有*.txt文件时,代码将执行1次。 但也有错误,因为我试图复制一个不存在的文件。 当ls命令的结果为空时,如何使do命令不执行


我已经试过使用ls,引用一个组合>什么都不能得到我想要的结果。

你可能需要bash
测试,通常缩写为
[
,诸如此类

if [ -f output.txt ] ; then

注意:上面的空格很重要。

您可能需要bash
测试
,通常缩写为
[
,诸如此类

if [ -f output.txt ] ; then

注意:上面的空格很重要。

也许您可以在以下情况之前添加一个条件:

if [ $(ls AB* 2>/dev/null) ]; then
     for ...

fi

使用
2>/dev/null
可以捕获不打印的错误。

也许可以在以下情况之前添加一个条件:

if [ $(ls AB* 2>/dev/null) ]; then
     for ...

fi

使用
2>/dev/null
可以捕获不打印的错误。

其他答案在Bash中完全错误。不要使用它们!请始终遵守以下规则:

每次在Bash中使用glob时,请将它们与
shopt-s nullglob
shopt-s failglob
一起使用

如果你遵守这条规则,你将永远安全。事实上,每次你不遵守这条规则,上帝就会杀死一只小猫

  • shopt-s nullglob
    :在这种情况下,不匹配的glob将扩展为零。请看:

    $ mkdir Test; cd Test
    $ shopt -u nullglob # I'm explicitly unsetting nullglob
    $ echo *
    *
    $ for i in *; do echo "$i"; done
    *
    $ # Dear, God has killed a kitten :(
    $ # but it was only for demonstration purposes, I swear!
    $ shopt -s nullglob # Now we're going to save lots of kittens
    $ echo *
    
    $ for i in *; do echo "$i"; done
    $ # Wow! :)
    
  • shopt-s failglob
    :在这种情况下,当glob没有扩展时,Bash将引发一个显式错误。请看:

    $ mkdir Test; cd Test
    $ shopt -u nullglob # Unsetting nullglob
    $ shopt -s failglob # Setting failglob for the love of kittens
    $ echo *
    bash: no match: *
    $ # cool :) what's the return code of this?
    $ echo $?
    1
    $ # who cares, anyway? and a for loop?
    $ for i in *; do echo "$i"; done
    bash: no match: *
    $ # cool :)
    
使用
nullglob
failglob
,一定不要启动带有不受控制参数的随机命令


干杯!

在Bash中,其他答案完全是错误的。不要使用它们!请始终遵守以下规则:

每次在Bash中使用glob时,请将它们与
shopt-s nullglob
shopt-s failglob
一起使用

如果你遵守这条规则,你将永远安全。事实上,每次你不遵守这条规则,上帝就会杀死一只小猫

  • shopt-s nullglob
    :在这种情况下,不匹配的glob将扩展为零。请看:

    $ mkdir Test; cd Test
    $ shopt -u nullglob # I'm explicitly unsetting nullglob
    $ echo *
    *
    $ for i in *; do echo "$i"; done
    *
    $ # Dear, God has killed a kitten :(
    $ # but it was only for demonstration purposes, I swear!
    $ shopt -s nullglob # Now we're going to save lots of kittens
    $ echo *
    
    $ for i in *; do echo "$i"; done
    $ # Wow! :)
    
  • shopt-s failglob
    :在这种情况下,当glob没有扩展时,Bash将引发一个显式错误。请看:

    $ mkdir Test; cd Test
    $ shopt -u nullglob # Unsetting nullglob
    $ shopt -s failglob # Setting failglob for the love of kittens
    $ echo *
    bash: no match: *
    $ # cool :) what's the return code of this?
    $ echo $?
    1
    $ # who cares, anyway? and a for loop?
    $ for i in *; do echo "$i"; done
    bash: no match: *
    $ # cool :)
    
使用
nullglob
failglob
,一定不要启动带有不受控制参数的随机命令


干杯!

谢谢这项工作。但我仍然不明白为什么在没有文件的情况下执行de-loop。@阿普斯塔克我不确定,但请注意,
for
不知道内部将要做什么。
AB*
可以与字段相关,但也可以是for的参数,例如
for 1 2 3中的I
。想象一下你是
for的AB*中的文件;do echo$file;done
。这是一种正常情况,可以正常工作。谢谢。但是我仍然不明白为什么在没有文件的情况下执行de loop。@阿普塔奇我不确定,但请注意,
for
不知道内部将执行什么操作。
AB*
可以与字段相关,但也可以是一个参数一个for的meter,例如1 2 3中i的
假设您对AB*中的文件执行
操作;执行echo$file;执行
。这是正常情况,可以正常工作。