Просто интересно: вы пытались поставить echo ${#1}перед этим утверждением, чтобы увидеть, какова ценность? Если это так, вы должны, как правило, включать в вопрос то, что вы нашли в этом исследовании, и, возможно, объяснение того, почему это не помогло.
jpmc26
Ответы:
24
${#1}длина (в количестве символов) $1которого является первым аргументом функции.
Таким образом (( ${#1} == 0 )), это сложный способ проверить, является ли первый аргумент пустым (или неустановленным, неустановленные параметры отображаются как пустые при расширении) или нет.
Чтобы проверить пустой параметр, каноническим способом является:
[-z "$1"]
Но там, более вероятно, намеревался проверить, был ли передан аргумент функции, и в этом случае синтаксис будет:
["$#"-eq 0]
(или (($# == 0))если вы хотите сделать свой скрипт специфичным для ksh / bash / zsh).
Однако в обоих случаях у оболочек типа Борна есть короткие пути:
test=${1:--}# set test to $1, or "-" if $1 is empty or not provided
test=${1--}# set test to $1, or "-" if $1 is not provided
Теперь, если цель состоит в том, чтобы передать это catили другую текстовую утилиту так, чтобы -(то есть stdin) передавался, когда не предоставлен аргумент, тогда вам может вообще не понадобиться ничего из этого.
Вместо:
getlable(){
test=${1--}
cat --"$test"}
Просто делать:
getlable(){
cat --"$@"}
Список аргументов функции будет передан как есть cat. Если аргумента нет, аргумент не catбудет получен (а затем считан из стандартного ввода, как если бы это был один -аргумент). И если есть один или несколько аргументов, все они будут переданы как есть cat.
echo ${#1}
перед этим утверждением, чтобы увидеть, какова ценность? Если это так, вы должны, как правило, включать в вопрос то, что вы нашли в этом исследовании, и, возможно, объяснение того, почему это не помогло.Ответы:
${#1}
длина (в количестве символов)$1
которого является первым аргументом функции.Таким образом
(( ${#1} == 0 ))
, это сложный способ проверить, является ли первый аргумент пустым (или неустановленным, неустановленные параметры отображаются как пустые при расширении) или нет.Чтобы проверить пустой параметр, каноническим способом является:
Но там, более вероятно, намеревался проверить, был ли передан аргумент функции, и в этом случае синтаксис будет:
(или
(($# == 0))
если вы хотите сделать свой скрипт специфичным для ksh / bash / zsh).Однако в обоих случаях у оболочек типа Борна есть короткие пути:
Теперь, если цель состоит в том, чтобы передать это
cat
или другую текстовую утилиту так, чтобы-
(то есть stdin) передавался, когда не предоставлен аргумент, тогда вам может вообще не понадобиться ничего из этого.Вместо:
Просто делать:
Список аргументов функции будет передан как есть
cat
. Если аргумента нет, аргумент неcat
будет получен (а затем считан из стандартного ввода, как если бы это был один-
аргумент). И если есть один или несколько аргументов, все они будут переданы как естьcat
.источник
${#1}
длина первого позиционного параметра.В запущенной оболочке вы можете использовать
установить их.
источник