IFSの使い方を理解してください。

IFSの使い方を理解してください。

シェル変数の使い方を理解しようとしていますIFS。次のコードがあります。

#!/bin/bash

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

IFS=$oldIFS

収益として実行してくださいbash test.sh

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

directoryしかし、ディレクトリを巡回したいと思います。ここで何が問題ですか$PATH:

答え1

これはスペースとまったく同じです。引用は$ourpath分割されません。引用符を削除すると、目的の結果が得られます。

つまり:

for directory in $ourpath ; do
    echo "directory = $directory"
done

$ourpathボーナスポイント:スペースが含まれているかどうかは重要ではありません。なぜなら、IFSスペースが含まれているので:分割されるからです。:

関連情報