#$在bash中做什么? (又名:哈希美元符号,英镑符号)

时间:2012-03-09 07:05:00

标签: bash shell

我在bash脚本中遇到过这个表达式,谷歌真的不容易。

#$...

感谢您的帮助!

5 个答案:

答案 0 :(得分:36)

#$“没有”,因为#正在开始评论,同一行背后的所有内容都会被忽略("shebang"除外)。

$#,就像你拥有它一样,打印传递给shell脚本的参数数量(比如$*打印所有参数)。

答案 1 :(得分:18)

在bash中,这通常是注释,哈希(在同一行)之后的所有内容都被忽略。 但是,如果你的bash脚本被传递给一些不寻常的东西,它就可以被解释。

例如,如果您向Sun Grid Engine提交脚本: “任何以hash-dollar开头的行,即#$,都是一个特殊的注释,SGE可以理解这个注释,指明工作的运行方式和位置。在这种情况下,我们指定运行作业的目录(#$ -cwd)和作业将加入的队列(#$ -q serial.q)。“ (来源:http://talby.rcs.manchester.ac.uk/~rcs/_linux_and_hpc_lib/sge_intro.html

答案 2 :(得分:12)

我刚刚在脚本中遇到#$并且想知道同样的事情。还有答案尚未提及:在bash搜索和替换中(参见here)。

通常,它的工作原理如下:

${PARAMETER/PATTERN/STRING}

PATTERN还可以包含 anchors ,以便在开头或结尾匹配它;即#%

MYSTRING=ABCCBA
echo ${MYSTRING/#A/y}  # RESULT: yBCCBA
echo ${MYSTRING/%A/y}  # RESULT: ABCCBy

您还可以使用PATTERN - 的变量跳过斜杠以添加混淆(并将模式匹配替换为空字符串):

echo ${MYSTRING#$PATTERN}  # RESULT: BCCBA
echo ${MYSTRING%$PATTERN}  # RESULT: ABCCB

这里是bash字符串中的#$

答案 3 :(得分:9)

预期的表达式可能 $#而不是#$

$#存储传递给shell程序的命令行参数的数量。

例如:

if [ $# -eq 0 ]; then
   echo "${USAGE}" >&2
   exit 1
fi

如果命令行参数的数量为0,则显示存储在$ USAGE变量中的消息。

答案 4 :(得分:3)

在更改基数时,您可能会看到#$出现的位置在算术表达式中:http://www.gnu.org/software/bash/manual/bashref.html#Shell-Arithmetic

例如echo $((2#101))会将101转换为基数为2,并打印5

我最近在这里使用过:

calculate_time() {
    minutes=$((${1:0:1} + ${1:9:1}))
    seconds=$((${1:2:1} + ${1:11:1}))
    milliseconds=$((10#${1:4:3} + 10#${1:13:3}))
    result=$((${minutes}*60*1000 + ${seconds}*1000 + ${milliseconds}))
    echo $result
}

第一个参数($1)采用某种格式我不记得使用awk。毫秒参数被解析为009,持续9毫秒。但是,bash将以前导0开头的数字视为八进制,因此我将它们转换为十进制。它并不完全使用#$,但是当我在一段时间后查看这段代码并试图记住发生的事情时,我认为这是一个表达式,并且发现了这个问题,所以这可能对其他人有所帮助。 / p>