2012-03-09 3 views
25

私はこの表現をbashスクリプトで見つけました。それは本当にグーグルにとって簡単ではありません。

#$... 

ありがとうございました!

+1

http://superuser.com/questions/247127/what-is-and-in-linux – Corbin

+1

#$がタイプミスではなく、AFAIKの場合はコメント行です。$#を指定した場合はその数です引数がスクリプトまたは関数に渡されました –

+0

あなたは確かにコメントではありませんか? –

答えて

31

#$は、#がコメントを開始しているため、同じ行のそのすべての後ろの部分は無視されます(ただし、"shebang"の例外を除いて)。

$#は、シェルスクリプトに渡された引数の数を出力します($*はすべての引数を出力します)。

12

bashでは、これは一般的にコメントであり、ハッシュの後のすべて(同じ行にある)は無視されます。 しかし、bashスクリプトが珍しいものに渡されている場合、それはそれによって解釈される可能性があります。

たとえば、Sun Grid Engineにスクリプトを提出した場合: "ハッシュ・ドルで始まる行、つまり#$は、SGEが理解するための特別なコメントです。この場合、ジョブを実行するディレクトリ(#$ -cwd)とジョブが参加するキュー(#$ -q serial.q)を指定します。 (ソース:http://talby.rcs.manchester.ac.uk/~rcs/_linux_and_hpc_lib/sge_intro.html

+1

これはSGEで見つかった使用例です。ありがとう。 –

+0

これは本物の答えです。受け入れるべきです – zhouji

8

は、意図した表現があったことを可能にでき$#代わりの#$

$#店舗シェルに渡されたコマンドライン引数の数プログラム。例えば

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

表示の$ USAGE変数に格納されたメッセージのコマンドライン引数の数はあなたが#$が出てくる表示される場合があります0

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から始まる数字を8進数として扱いますので、10進数に変換しました。 #$を使っているわけではありませんが、しばらくしてこのコードを見て、何が起こっていたのかを覚えようとしたとき、私はこれが最初の表現であると思って、この質問を見つけました。

+0

おかしくても、SOがこれを正しく表示することはできません。 githubでは正しく表示されません。しかしそれは崇高なテキストでうまく見えます。 – gsingh2011

7

私はちょうどスクリプトで#$に出くわして、同じことが不思議に思っていました。まだ言及されていない答えがあります:bash検索と置換(here参照)。それはこのように動作します

通常、:

${PARAMETER/PATTERN/STRING} 

PATTERNはまたいずれかの先頭または末尾にマッチするアンカーを含めることができます。

echo ${MYSTRING#$PATTERN} # RESULT: BCCBA 
echo ${MYSTRING%$PATTERN} # RESULT: ABCCB 
: - :すなわち #%は混乱に追加するスラッシュをスキップ (空の文字列のパターンマッチを置き換える)

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

またPATTERNのための変数を使用することができます

ここには、#$のbash文字列があります。

関連する問題