我在写一些bash练习,这特别是要检查所有名为file-a(sonenumber)的文件,并将其移动到名为dirA的目录中,但是for循环有一些问题,我可以在没有for循环的情况下这样做,只是简单地写
mv $(ls -la | awk '$9 - /-a[0-9]+/ {print $9}') dirA
但是我想用for来做,我不能这么做,这是剧本
FILES=(ls -la | awk '$9 - /-a[0-9]+/ {print $9}')
for arg in "$FILES"
do
mv $arg dirA
done
3条答案
按热度按时间wqnecbli1#
不需要for循环,只需要一个shell
glob
:如果你坚持循环:
或
但是请,避免解析
ls
输出。ls
是一个交互式查看目录元数据的工具。任何使用代码解析ls
输出的尝试都是无效的。Globs更加简单和正确:for file in *.txt
。读取http://mywiki.wooledge.org/ParsingLsDon't use UPPER case variables
h7appiyu2#
您没有将
FILES
设置为命令的输出。因此,您需要使用$(command)
。要使其成为一个数组,请在其周围 Package 另一组()
。然后要循环遍历数组内容,请使用
"${FILES[@]}
。我不知道你为什么要使用
ls -la
,而你可以只使用ls -a
。然后每个文件名将是一行,你不必提取$9
。最好是not to parse the output of
ls
。xj3cbfub3#
我修改了你的代码,让它在for循环中工作。