POSIX 数组和循环
POSIX array and loop
我按如下方式制作了一组文件,然后“获取”这些文件。我也在尝试制作一个尽可能接近 POSIX 的脚本,这样我就不会在不同的 shell 中遇到问题 运行。
set -- path alias function
for file in "${@}"; do
[ -r "${SELF_PATH_DIR}.${file}" ] && [ -f "${SELF_PATH_DIR}.${file}" ] && . "${SELF_PATH_DIR}.${file}";
done
它有效,但我不喜欢我必须多次指定 ${SELF_PATH_DIR}.
的事实,以便字符串采用文件的真实路径(/Users/karlsd/dotfiles/.path
等) .
有什么方法可以让它更简单吗?例如,要在循环之前为每个项目添加/Users/karlsd/dotfiles/.
?
只需将"${SELF_PATH_DIR}.${file}"
赋值给一个临时变量或修改同一个变量。
顺便说一句:如果循环是您使用 set --
/$@
的唯一位置,那么您可以直接遍历列表:
for file in path alias function; do
file="${SELF_PATH_DIR}.${file}"
[ -r "$file" ] && [ -f "$file" ] && . "$file";
done
你实际上有一个比仅仅重复变量更大的问题:如果 $@
中的一个条目恰好是某个文件的 absolute 路径,您的代码会中断。
我会在循环中使用 realpath:
absfile=$(realpath "$file")
[ -r "$absfile" ] && [ -f "$absfile" ] && . "$absfile"
当然这会默默地跳过file
的“错误”条目,例如,如果名称表示目录而不是纯文件或您没有读取权限。除非这是所需的行为,否则我会省略测试并只获取文件。如果情况不对,您至少会收到一条明确的错误消息。
我按如下方式制作了一组文件,然后“获取”这些文件。我也在尝试制作一个尽可能接近 POSIX 的脚本,这样我就不会在不同的 shell 中遇到问题 运行。
set -- path alias function
for file in "${@}"; do
[ -r "${SELF_PATH_DIR}.${file}" ] && [ -f "${SELF_PATH_DIR}.${file}" ] && . "${SELF_PATH_DIR}.${file}";
done
它有效,但我不喜欢我必须多次指定 ${SELF_PATH_DIR}.
的事实,以便字符串采用文件的真实路径(/Users/karlsd/dotfiles/.path
等) .
有什么方法可以让它更简单吗?例如,要在循环之前为每个项目添加/Users/karlsd/dotfiles/.
?
只需将"${SELF_PATH_DIR}.${file}"
赋值给一个临时变量或修改同一个变量。
顺便说一句:如果循环是您使用 set --
/$@
的唯一位置,那么您可以直接遍历列表:
for file in path alias function; do
file="${SELF_PATH_DIR}.${file}"
[ -r "$file" ] && [ -f "$file" ] && . "$file";
done
你实际上有一个比仅仅重复变量更大的问题:如果 $@
中的一个条目恰好是某个文件的 absolute 路径,您的代码会中断。
我会在循环中使用 realpath:
absfile=$(realpath "$file")
[ -r "$absfile" ] && [ -f "$absfile" ] && . "$absfile"
当然这会默默地跳过file
的“错误”条目,例如,如果名称表示目录而不是纯文件或您没有读取权限。除非这是所需的行为,否则我会省略测试并只获取文件。如果情况不对,您至少会收到一条明确的错误消息。