我有两个问题。
我在脚本中找到以下代码行:IFS=${IFS#??}
我想知道它到底在做什么?
当我试图在目录中的每个地方执行某些操作时,例如:

$1 = home/user/bin/etc/something...

所以我需要把ifs改成“/”,然后像循环一样继续
while [ -e "$1" ]; do
    for F in `$1`
        #do something
    done
shift
done

这是正确的方法吗?

最佳答案

${var#??}是一个shell parameter expansion。它试图将$var的开头与#之后写入的模式相匹配。如果是,则返回已删除该部分的变量$var。由于?匹配任何字符,这意味着${var#??}将从var$var中删除前两个字符。

$ var="hello"
$ echo ${var#??}
llo

因此,使用IFS=${IFS#??}可以在移除其前两个字符后将IFS重置为其值。
要在以/分隔的字符串中循环单词,可以将分割的字符串存储到数组中,然后循环:
$ IFS="/" read -r -a myarray <<< "home/user/bin/etc/something"
$ for w in "${array[@]}"; do echo "-- $w"; done
-- home
-- user
-- bin
-- etc
-- something

关于linux - IFS和目录中的单个位置移动,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36535215/

10-12 15:55