【发布时间】:2015-03-27 20:19:40
【问题描述】:
假设我有一个类似的命令
cp file1\ with\ escaped\ spaces file2\ with\ escaped\ spaces
此外,我想将此命令作为字符串处理,以使用参数扩展名来收集带有空格的文件名。实际上我可以通过转义获得正确的文件名。
但是考虑到以下 sn-p,我无法获得左侧文件的完整文件名。
$ str="cp file1\ with\ escaped\ spaces file2\ with\ escaped\ spaces";
$ fr=${str##*[^\\] }; echo ${fr}; # gets the rifght one
file2\ with\ escaped\ spaces
$ fl=${str#* }; echo ${fl%%[^\\] *}; # the last expansion strips a `s`
file1\ with\ escaped\ space
当我尝试获取左侧文件时,我遇到了这个文件名的最低有效字符也被剥离的问题。
我想知道是否可以使用 bash 的参数扩展来收集命令字符串的左空格转义文件名?
我想我找不到正确的 reg exp 找到不包含 \-prefix 的空间。
【问题讨论】:
-
为什么这个命令需要在字符串中?
-
@EtanReisner 我希望能够处理传递给脚本的关于带有转义字符的文件名的命令字符串。我只是希望“命令”看起来像在纯 shell 上运行命令时显示的那样。 atm 不一定是命令。请专注于我坚持的转义/正则表达式/修剪。
-
在字符串中嵌入复杂的命令是有问题的,甚至无法正确执行。这就是我问的。详情请见mywiki.wooledge.org/BashFAQ/050。
-
@EtanReisner 感谢您指出这一点。无论如何,我通过替换正确的字符串转义文件名(s.b.)找到了一个奇怪的解决方案。