shell 脚本中哈希的使用

shell 脚本中哈希的使用

除了在注释或 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

相关内容