2016-12-16 13 views

答えて

0

:あなたは代入演算子(=を)忘れてしまった

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

。二重引用符で二重引用符を取得するには、\"でそれらをエスケープする必要があります。

また、キャプチャグループと逆参照を&に変更しました。これは完全一致を示しています。

lsの出力をプログラムで処理すると、not recommendedになります。堅牢なソリューションは、たとえば、findまたはファイルグロブ(anubhava's answerなど)を使用しますが、質問の主なポイントは二重引用符をエスケープすることです。

0

あなたは等号を見落としました。二重引用符をエスケープする必要があります。あなたのファイル名は、英数字またはDOTが含まれているか、アンダースコア、あなたがlsの出力を解析することは避けてくださいと仮定すると、

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

0

:これを試してみてください。 もう1つの落とし穴は、パイプラインをコマンドに使用することで、現在のシェルではないサブシェルでのみaliasが作成されます。

あなたは代わりにこの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。リンクをお読みください!あなたのケースでは

、なしのファイル名には改行がないと仮定すると、1は^ 0を使用することができます。

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

^0 LSを解析し、同じ問題をあなたになり残すが、なしの呼び出しなし余分なプロセスは、printfがビルドされているためです。

関連する問題