fbr*_*eto 16 bash whitespace parameter-passing filepath delimiter
我有一个bash脚本,可以从用户那里收到一组文件.这些文件有时位于名称中带有空格的目录下.不幸的是,与此问题不同,所有文件名都通过命令行界面传递.让我们假设路径在用户传入时正确引用,因此空格(保存为引用空格)是路径之间的分隔符.如何以保留引用空格的方式将这些参数转发到我的bash脚本中的子例程?
Rol*_*lig 21
#! /bin/bash
for fname in "$@"; do
process-one-file-at-a-time "$fname"
done
Run Code Online (Sandbox Code Playgroud)
注意过度使用引号.这一切都是必要的.
将所有参数传递给另一个程序甚至更简单:
process-all-together "$@"
Run Code Online (Sandbox Code Playgroud)
棘手的情况是你想把参数分成两半.这需要在简单的POSIX shell中添加更多代码.但也许Bash有一些特殊功能.
您想要"$@",它具有扩展$@但保留调用方的空白引用的特殊语法(它不会创建包含所有参数的单个巨大字符串)。所以有人可以像这样调用你的脚本:
bash-script.sh AFile "Another File With Spaces"
Run Code Online (Sandbox Code Playgroud)
然后在您的脚本中,您可以执行以下操作:
for f in "$@"; do
echo "$f";
done
Run Code Online (Sandbox Code Playgroud)
并获得两行输出(不是 5 行)。
在此处阅读有关特殊参数“@”的段落:http : //www.gnu.org/s/bash/manual/bash.html#Special-Parameters
| 归档时间: |
|
| 查看次数: |
16506 次 |
| 最近记录: |