试图了解如何使用 IFS

Hun*_*ter 4 scripting bash shell-script

我试图了解如何使用 shell 变量IFS。我有以下代码:

#!/bin/bash

ourpath=$PATH
oldIFS=$IFS
IFS=":"
echo "ourpath = $ourpath"
for directory in "$ourpath"; do
    echo "directory = $directory"
done

IFS=$oldIFS
Run Code Online (Sandbox Code Playgroud)

使用bash test.shyield运行它:

ourpath = ~/bin:/home/<user>/anaconda3/bin:/home/<user>/.local/bin:/home/<user>/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:~/scripts
directory = ~/bin:/home/<user>/anaconda3/bin:/home/<user>/.local/bin:/home/<user>/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:~/scripts
Run Code Online (Sandbox Code Playgroud)

但我希望directory循环遍历目录,$PATH因为它应该被:. 这里出了什么问题?

V13*_*V13 5

它与空格完全相同:您已引用$ourpath并且不会拆分。如果你删除引号,那么它会给你你正在寻找的结果。

IE:

for directory in $ourpath ; do
    echo "directory = $directory"
done
Run Code Online (Sandbox Code Playgroud)

加分项:是否$ourpath包含空格无关紧要,因为IFSis :,所以它只会被拆分: