我在bash脚本中遇到了这个表达式,这对谷歌来说确实不容易。
#$...
感谢您的帮助!
我在bash脚本中遇到了这个表达式,这对谷歌来说确实不容易。
#$...
感谢您的帮助!
#$
确实“没有”,因为#
正在开始评论,并且在同一行后面的所有内容都被忽略(除了"shebang"的显着例外)。
$#
,因为您已经打印了传递给shell脚本的参数数量(如$*
打印所有参数)。
在bash中这通常是一个注释,散列之后的所有内容(在同一行)都被忽略。 但是,如果你的bash脚本被传递给不寻常的东西,它可以被解释。例如,如果您将脚本提交给Sun Grid Engine: “任何以散列美元开头的行,即#$,都是特殊注释,SGE可以理解这些注释以指定关于如何或在何处在这种情况下,我们指定作业将运行的目录(#$ -cwd)和作业将加入的队列(#$ -q serial.q)。“ (来源:http://talby.rcs.manchester.ac.uk/~rcs/_linux_and_hpc_lib/sge_intro.html)
这是我在SGE中找到的用例。谢谢。 – 2016-11-01 19:44:58
这是真正的答案,应该接受 – zhouji 2017-09-19 15:47:48
这可能是可能的是,预期的表达,而不是$##$
$#商店被传递到外壳,命令行参数的个数程序。
例如:
if [ $# -eq 0 ]; then
echo "${USAGE}" >&2
exit 1
fi
显示存储在$用法变量的消息,如果命令行参数的个数为0
一个地方,你可能会看到#$
拿出里面有个换算基数时的算术表达式: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开头的数字视为八进制数,所以我将它们转换为十进制数。它并不完全使用#$
,但是当我在一段时间后查看此代码并试图记住发生了什么时,我认为这是一个表达式,并且发现了这个问题,因此这可能会帮助其他人。
有趣的是,即使是SO也无法正确显示。它也不能正确显示在github上。尽管在Sublime Text中看起来很好。 – gsingh2011 2013-08-30 00:08:53
我刚刚遇到了一个脚本中的#$
,并想知道同样的事情。还有没有提到的答案:在bash搜索和替换(见here)。
通常情况下,它的工作原理是这样的:
${PARAMETER/PATTERN/STRING}
PATTERN
还可以包括锚,要么在开始或结束与之匹敌;即#
和%
:
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字符串中的#$
。
http://superuser.com/questions/247127/what-is-and-in-linux – Corbin 2012-03-09 07:08:47
如果#$不是拼写错误,那么AFAIK就是注释行,如果你的意思是$#那么它的数量是传递给脚本或函数的参数 – 2012-03-09 07:11:01
您确定它不是评论? – 2012-03-09 07:13:54