我编写了以下 bash 函数,以便使用其默认应用程序从命令行轻松打开文件:
## Open files with their default application
function open {
# If no arguments supplied, open current directory in Files application
if [ $# -eq 0 ]; then
xdg-open . &> /dev/null
else
# Else, open all files in the args with their default application
for file in $@; do
xdg-open "$file" &> /dev/null
done
fi
}
这个函数工作得很好,但是,它不能处理其中有空格的文件名。即使空格被转义或文件名被引用,像这样:
open file\ with\ spaces\ in\ name.txt && open "file with spaces in name.txt"
当您尝试打开这些文件时,该功能仍然不执行任何操作。如果我取出 for 循环并让它打开传递给函数的第一个参数,就没有问题;仅当我启用它以支持多个参数时,该功能才不起作用。
有没有办法解决这个问题?我确实有一个 bash 函数,可以将文件名中的空格换成下划线,但我不想为了open
在该文件上使用我的函数而不必这样做。
为了使每个位置参数扩展为一个单独的单词,您需要双引号
$@
以及循环变量"$file"
。来自man bash
: