IFS 和通过目录中的单个位置移动

IFS and moving through single positions in directory

我有两个问题。

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

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

    所以我需要将 IFS 更改为“/”,然后像

    这样在 for 循环中继续执行此操作
    while [ -e "" ]; do 
        for F in ``
            #do something
        done
    shift
    done
    

这是正确的方法吗?

${var#??} 是一个 shell parameter expansion。它尝试将 $var 的开头与 # 之后写入的模式相匹配。如果是,它将 returns 变量 $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