除了在注释或 as 中使用哈希字符之外,shell 脚本中的哈希字符还有哪些用途$#
?还有什么其他用途?
我希望能够grep
在哈希之前获取每一行的内容,因为在代码的同一行中有注释。
应用上下文主要是korn shell,我使用的系统是“HP-UX ***B.11.31 U ia64 *****无限用户许可证”。
答案1
#
是一个特殊字符。特殊字符被定义为具有超出其字面含义的含义的字符。#
用于在 Shell 脚本中注释掉。
然而也有例外,即#!
所谓的“sha-bang”。 sha-bang 位于脚本的开头(代码的第一行),告诉您的系统该文件是一组要输入到指定命令解释器的命令。这里有一些:
#!/bin/sh
#!/bin/bash
#!/usr/bin/perl
#!/usr/bin/tcl
#!/bin/sed -f
#!/bin/awk -f
命令不能跟在同一行的注释之后。没有方法可以终止注释,以便“实时代码”在同一行上开始。为下一个命令使用新行。
这里有些例子:
echo "The # here does not begin a comment."
echo 'The # here does not begin a comment.'
echo The \# here does not begin a comment.
echo The # here begins a comment.
echo ${PATH#*:} # Parameter substitution, not a comment.
echo $(( 2#101011 )) # Base conversion, not a comment.
您也可以通过谷歌搜索#
您不熟悉的特定用途。
答案2
#
除了用作注释的开头之外,Kornshell 中还有很多 hash ( ) 用途; $#
, ${#}
, ${var#pat}
, ${var##pat}
, ${#var}
, ${#arr[*]}
, ${#arr[@]}
, base#number
(即文字数字),它可以是模式的一部分,例如[#]
, 或字面上的字符串"...#..."
,或作为“here-docs”中文本数据的一部分。
较新版本的 ksh 还将支持$( n <# )
, ${var/#pat/str}
, <<#
, <# ((expr))
, , ># ((expr))
, <#/pat
, <##/pat
,并且#
在 ksh 的内置格式说明符中具有特定含义printf
。
(我可能仍然错过了一两个申请。)
参考:
ksh93:http://www2.research.att.com/sw/download/man/man1/ksh.html
ksh88:http://www2.research.att.com/sw/download/man/man1/ksh88.html