我有两个问题。
我在脚本中找到以下代码行: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/