我正在努力制作shell脚本的正面或反面。有人可以解释一下这条线吗?
$ FILEDIR是一个包含文件的目录。 F是从此命令返回的文件数组中的标记: files = $(找$ FILEDIR -type f | grep -v .rpmsave \ $ | grep -v .swp \ $)
令人困惑的行在for循环中。
for f in $files; do
target=${f:${#FILEDIR}}
<<do some more stuff>>
done
我从来没有在shell脚本for循环中看过冒号和哈希。我一直无法找到关于它们的任何文件......有人可以试着开导我吗?我很感激。
答案 0 :(得分:2)
这里没有涉及数组。 POSIX sh没有数组(假设您没有使用基于标记的其他shell)。
冒号表示Bash / Ksh substring expansion。这些也不是POSIX。 #
前缀扩展为参数中的字符数。我想他们打算砍掉目录部分并将其分配给target
。
要解释其余部分:第一个find运行并且热闹地传输到两个greps中,这些greps执行可以单独使用find执行的操作(除了打破包含换行符的可能文件名),并且输出保存到{ {1}}。如果仅限于POSIX工具,这也是无法正确完成的事情,但有更好的方法。
接下来,files
展开unquoted,并在files
ridiculous的for
循环中通过shell进行变异,以迭代无意义的结果。如果脚本的其余部分很糟糕,可能会将其丢弃并重新开始。没有办法实现预期的目标。
答案 1 :(得分:1)
冒号可以作为子串。所以:
A=abcdefg
echo ${A:4}
将打印输出:
efg
我不确定他们为什么会使用文件目录作为第二个参数...
如果您在理解for循环部分时遇到问题,请尝试http://www.dreamsyssoft.com/unix-shell-scripting/loop-tutorial.php