2016-12-16 57 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。