0

我有两个问题。

  1. 我在脚本中找到了以下代码行:IFS=${IFS#??} 我想了解它到底在做什么?
  2. 当我试图从目录中的每个地方执行某些操作时,例如:

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

    所以我需要将 IFS 更改为“/”,然后在 for 循环中进行此操作

    while [ -e "$1" ]; do 
        for F in `$1`
            #do something
        done
    shift
    done
    

那是正确的方法吗?

4

1 回答 1

5

${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
于 2016-04-10T21:51:54.970 回答