我在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