如何为包含单引号的命令创建别名?

时间:2016-03-17 03:10:18

标签: bash escaping alias quoting

要读取适合文件的标题,我在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

2 个答案:

答案 0 :(得分:1)

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

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

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

请注意,\t\n将被$...扩展为文字标签和新行预先,但是,在这里没有什么区别;如果有疑问,请将原始字符串中的所有\个实例加倍。

但一般来说,考虑使用一个函数chepner suggests ,因为它避免了引用的麻烦并且是可扩展的。

答案 1 :(得分:0)

不要为别名烦恼;改为使用函数。

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