bash
  • escaping
  • alias
  • quoting
  • 2016-03-17 67 views 1 likes 
    1

    要阅读fitsfile的头我在bash中使用这个命令:如何为包含单引号的命令创建别名?

    hexdump -e '"%_ad\t" 80/1 "%_p" "\n"' astlimits.fits | less 
    

    这里,配合文件可以从以下网址下载:
    http://das.sdss.org/contents/fits/astlimits.fits

    现在我试图创建一个别名在BASH中是这样的:

    alias fitsheader='hexdump -e \'"%_ad\t" 80/1 "%_p" "\n"\'' 
    

    但是,它没有工作。
    ,这是什么正确的语法,使下面的命令作品:

    fitsheader astlimits.fits | less 
    
    +0

    请不要添加后续问题。正如@chepner指出的那样,并且与您的症状一致,“fitsheader”的现有_alias_定义可能会导致语法错误,因为这意味着函数定义中的“fitsheader”一词被别名扩展,导致不是有效的函数名称。请注意,即使你的'〜/ .bashrc'文件中没有这样的别名定义,如果你定义了别名_interactively_然后_reload_'〜/ .bashrc'而不是打开一个新的shell或重新启动你的话,你仍然会遇到这个问题终奌站。 – mklement0

    +0

    请确认问题已解决;如果没有,请删除此问题中的后续问题,并将其作为新问题发布。 – mklement0

    回答

    1

    单引号字符串中的单引号的嵌套是不支持的Bash(和其他POSIX兼容的壳)

    你可以,但是,使用ANSI C-quoted string ($'...'),其中'可以被引用(转义)作为\'

    alias fitsheader=$'hexdump -e \'"%_ad\t" 80/1 "%_p" "\n"\'' 
    

    注意,\t\n将扩大到由$...,其中,但是,并没有在这里做一个差异文字标签,换行符锋线;如有疑问,请将原始字符串中的所有\实例加倍。

    一般来说,虽然,考虑使用功能,为chepner suggests,因为它避免了报价头痛是可扩展的。

    +0

    还有一个问题,MacOS的tcsh的别名应该是什么?别名fitsheader $'hexdump -e \'“%_ ad \ t”80/1“%_p”“\ n”\''无效。 –

    +0

    本网站的价值在_well-defined_问题和匹配的答案。虽然改变问题并询问后续问题可能对您个人有所帮助,但这会让其他人感到分心。请问一个_new_问题,特别是关于'tcsh'别名的问题(作为旁白,我个人无法帮助你,但我有一个提示:为了便于跨shell使用,请写一个_script_)。 – mklement0

    0

    不要用别名打扰;改用一个函数。

    fitsheader() { 
        hexdump -e '"%_ad\t" 80/1 "%_p" "\n"' "$1" 
    } 
    
    +0

    我在〜/ .bashrc里面试过这个代码,它给出了如下的错误:语法错误附近有意想不到的标记'(' –

    +1

    )你还在定义别名吗?如果是这样的话,请将其删除;函数定义扩展为'hexdump -e。 ..()',这会导致语法错误 – chepner

    +0

    我放置在〜/ .bashrc中的函数之上并且找到它,但那不起作用,什么可能是正确的方法? –

    相关问题