2017-10-21 137 views
1

我想运行这个简单的脚本,在这个脚本中我通过一系列目录中的文件循环,并且想要创建一个带有'cut'的变量,以提取部分名称的文件。 我得到一个权限被拒绝的错误,不知道为什么。 下面是我的脚本。在循环linux中创建变量 - 权限被拒绝

FILES=./data/* 

for f in $FILES 
do 
    NEWNAME=$($f|cut -c3-12) 
    echo $NEWNAME 
done 

的最终目标是创建每个文件一个目录,下游加工,具有mkdir /path/to/new/directory/$NEWNAME

+0

谁是所有者,以及'。/ data/*'中文件的权限是什么? – alfasin

回答

3

$(stuff)执行stuff作为命令并将其输出替换回命令行。所以,当你这样做:

$($f|cut -c3-12) 

它试图执行$f为命令,和管道输出到cut。您收到错误,因为$f中的文件没有执行权限。

如果你想切变$f的内容,你需要呼应它:

NEWNAME=$(echo "$f" | cut -c3-12) 

但有没有必要使用cut为此,bash有一个内置的参数扩展操作选择一个子字符串:

NEWNAME=${f:2:10} 
+0

谢谢!它的工作,并使语法的使用更清晰。 – CAsimonet