我有两个问题。
- 我在脚本中找到了以下代码行:
IFS=${IFS#??}
我想了解它到底在做什么? 当我试图从目录中的每个地方执行某些操作时,例如:
$1 = home/user/bin/etc/something...
所以我需要将 IFS 更改为“/”,然后在 for 循环中进行此操作
while [ -e "$1" ]; do for F in `$1` #do something done shift done
那是正确的方法吗?
${var#??}
是一个shell参数扩展。它尝试将 的开头$var
与 之后编写的模式相匹配#
。如果是,则返回$var
删除了该部分的变量。由于?
匹配任何字符,这意味着${var#??}
从 var 中删除前两个字符$var
。
$ var="hello"
$ echo ${var#??}
llo
因此,在删除其前两个字符后,IFS=${IFS#??}
您将重置IFS
为其值。
要遍历/
-delimited 字符串中的单词,您可以将拆分的字符串存储到一个数组中,然后循环遍历它:
$ IFS="/" read -r -a myarray <<< "home/user/bin/etc/something"
$ for w in "${array[@]}"; do echo "-- $w"; done
-- home
-- user
-- bin
-- etc
-- something