Linux don';无法在ls do中执行文件
我有一个脚本,它必须处理目录中的一些文件(名称以AB开头)。 代码是: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
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;执行
。这是正常情况,可以正常工作。