【发布时间】:2018-11-29 10:58:43
【问题描述】:
我目前正在尝试使用以下函数创建一个检索文件所有者名称的函数:
OWNER_IDX=3
fileowner=""
#Gives file owner name. Takes the file name as an argument
function getfileowner()
{
fileowner=`ls -l | grep $1 | cut -f $OWNER_IDX -d " "`
echo $fileowner
}
为了验证我的函数究竟做了什么,我创建了一个测试函数:
function testgetfileowner()
{
for file in `ls`
do
getfileowner $file
echo "$file belongs to $fileowner"
done
}
但是当我执行我的脚本时,我得到了这个输出:
exemple_gz.gz belongs to
exemple_tar.tar belongs to
exemple_tgz.tgz belongs to
exercice_10.sh belongs to
exercice_8.sh belongs to
INFOH304 belongs to
lipap.sh belongs to
我测试线
fileowner=`ls -l | grep $1 | cut -f $OWNER_IDX -d " "`
在终端上如下:
ls -l | grep exemple_gz.gz | cut -f 3 -d " "
而且效果很好。我做错什么了?提前致谢。
【问题讨论】:
-
为什么不直接使用
stat -c %U $1?而且即使有你的代码,grep阶段也没用,你可以直接做ls -l $1 -
也代替
for file in `ls`写for file in *。它更安全、更短。 -
@Geoffroy 我不允许使用我还没有学过的任何命令。但是感谢您的建议,这更容易。我使用
grep阶段的原因是因为当$1 是文件夹时使用ls -l $1不能正常工作。 -
@genkidesuka
ls -ld就是这种情况,所以它列出了目录本身而不是它的内容 -
我质疑一个无法为目前提供的材料提供适当作业的课程。