2016-12-16 61 views

回答

0

像这样:

alias asdf="ls -1 | sed 's/.*/alias & \"shot &\"/'" 

你忘了赋值运算符(=);要在双引号内得到双引号,你必须用\"来转义它们。

此外,我已将您的捕获组和反向引用更改为使用&,即代表完整匹配。

请注意,以编程方式处理ls的输出是not recommended。例如,一个强大的解决方案将使用find或fileglobs(如anubhava's answer),但问题的主要观点是关于转义双引号。

0

您错过了相同的符号,您必须使用双引号。试试这个:

alias asdf="ls -1 | sed 's/\(.*\)/alias \1 \"shot \1\"/'"

0

假设你的文件名只包含字母,数字或点或下划线,你应该避免解析的ls输出。 另一个缺陷是在您的命令中使用管道,这将只在子shell中创建alias,而不是在当前shell中。

您可以使用此for循环,而不是:

for f in *; do 
    alias $f="shot $f" 
done 
1

不要使用别名,使用函数:

my_func() { 
    ls -1 | sed 's/.*/alias & "shot &"/' 
} 

但是你应该avoid parsing the output of ls。请阅读链接!

在你的情况下,假设没有出现在文件名中没有换行符,可以使用^ 0:

my_func() { 
    printf '%s\n' * | sed 's/\(.*\)/alias \1 "shot \1"/' 
} 

^0,这给你留下解析LS同样的问题会,但是没有不调用额外的过程,因为printf是buildin。