我试图了解如何使用 shell 变量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
并且它不会被拆分。如果删除引号,它将为您提供所需的结果。
IE:
for directory in $ourpath ; do
echo "directory = $directory"
done
$ourpath
加分点:如果包含空格并不重要,因为IFS
是:
,所以它只会被分割: