Shu*_*eng 3 linux shell bash debian shell-script
我无法理解${!path//:/$'\n'}下面的 shell 函数是如何工作的。
我都对着man bash并认为使用${parameter/pattern/string}到替补多:用\n,但在这种情况下,扩张开头${!?另外,为什么使用两个正斜杠path//而不是一个?
pathprint () {
if (($# == 0)); then
set -- PATH
fi
for path; do
echo "$path"
echo "${!path//:/$'\n'}"
done
}
Run Code Online (Sandbox Code Playgroud)
最后,为什么下面的“简化”不起作用?
pathprint () {
echo "PATH"
echo "${!PATH//:/$'\n'}"
done
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,$PATH在参数扩展之前扩展,并bash抱怨不存在具有当前值名称的参数$PATH?
for path; do不指定in,这意味着它迭代位置参数。如果您在调用函数时未指定任何内容,则 $# 将为零,而 $1 将设置为 string PATH。
${!path}扩展到名称在 中的变量的内容$path。这意味着,函数的参数不是路径,而是包含要打印的路径的变量的名称。
当使用//代替/替代时,所有出现的模式都会被替换。单斜杠仅替换第一次出现。
| 归档时间: |
|
| 查看次数: |
53 次 |
| 最近记录: |