shell # $在bash中有什么作用?散列美元符号,磅美元符号)

ffdz8vbo  于 2023-03-30  发布在  Shell
关注(0)|答案(5)|浏览(207)

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

#$...
wvyml7n5

wvyml7n51#

#$“什么都不做”,因为#是开始注解,它后面同一行的所有内容都被忽略("shebang"是一个明显的例外)。
$#是一个包含传递给shell脚本的参数数量的变量(就像$*是一个包含所有参数的变量)。

hivapdat

hivapdat2#

在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

qc6wkl3g

qc6wkl3g3#

我刚刚在一个脚本中遇到了一个#$,并想知道同样的事情。还有一个尚未提到的答案:在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字符串中的#$

sc4hvdpw

sc4hvdpw4#

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

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

例如:

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

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

9lowa7mx

9lowa7mx5#

当改变基数时,你可能会看到#$出现的一个地方是在算术表达式中: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开头的数字视为八进制,所以我将它们转换为十进制。它并不完全使用#$,但是当我看了一会儿这段代码并试图记住是怎么回事时,我一开始以为那是一个表达式,发现了这个问题,所以这可能会帮助其他人。

相关问题