Подтвердить что ты не робот

Что делает # $в bash? (ака: знак доллара хэша, знак фунта доллара)

Я натолкнулся на это выражение в bash script, и это действительно нелегко для Google.

#$...

Спасибо за вашу помощь!

4b9b3361

Ответ 1

#$ делает "ничего", поскольку # запускает комментарий, а все за ним на одной строке игнорируется (за исключением "shebang" ).

$#, как и у вас, печатает количество аргументов, переданных оболочке script (например, $* печатает все аргументы).

Ответ 2

В bash это обычно комментарий, все после хеша (в той же строке) игнорируется. Однако, если ваш bash script передается на что-то необычное, его можно интерпретировать.

Например, если вы отправляете script в Sun Grid Engine: "Любая строка, начинающаяся с хеш-доллара, т.е. # $, Является специальным комментарием, который понимается SGE, чтобы указать что-то о том, как и где выполняется задание. В этом случае мы указываем каталог, в котором должно выполняться задание (# $-cwd) и очередь, в которую будет выполняться задание (# $-q serial.q)." (источник: http://talby.rcs.manchester.ac.uk/~rcs/_linux_and_hpc_lib/sge_intro.html)

Ответ 3

Возможно, что предполагаемое выражение было $# вместо # $

$# Сохраняет количество аргументов командной строки, которые были переданы программе оболочки.

например:

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

Отображает сообщение, хранящееся в переменной $USAGE, если число аргументов командной строки равно 0.

Ответ 4

Я только что встретил #$ в script и задавался вопросом то же самое. Существует ответ, который еще не упоминался: в bash поиск и замена (см. здесь).

Обычно он работает следующим образом:

${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.

Ответ 5

Одно место, где вы можете увидеть #$, появляется внутри арифметического выражения при смене базы: http://www.gnu.org/software/bash/manual/bashref.html#Shell-Arithmetic

Например, echo $((2#101)) преобразует 101 в базу два и напечатает 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 как восьмеричные, поэтому я преобразовал их в десятичные. Это не совсем с помощью #$, но когда я посмотрел на этот код через некоторое время и попытался вспомнить, что происходит, я подумал, что это выражение было первым и нашло этот вопрос, поэтому это может помочь кому-то другому.