我在bash脚本中遇到过这个表达式,谷歌真的不容易。
#$...
感谢您的帮助!
答案 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>