Jak sprawdzić, czy $*jest pusty? Innymi słowy, jak sprawdzić, czy nie podano argumentów dla polecenia?
Jak sprawdzić, czy $*jest pusty? Innymi słowy, jak sprawdzić, czy nie podano argumentów dla polecenia?
Odpowiedzi:
Aby sprawdzić, czy nie podano argumentów dla polecenia, sprawdź wartość $#zmiennej,
if [ $# -eq 0 ]; then
echo "No arguments provided"
exit 1
fi
Jeśli chcesz użyć $*( nie preferowane ),
if [ "$*" == "" ]; then
echo "No arguments provided"
exit 1
fi
Niektóre wyjaśnienia:
Drugie podejście nie jest preferowane, ponieważ w parametrach pozycyjnych rozszerzenie *rozszerza się na parametry pozycyjne, zaczynając od jednego. Kiedy rozwinięcie występuje w obrębie podwójnych cudzysłowów, rozwija się do pojedynczego słowa z wartością każdego parametru oddzieloną pierwszym znakiem zmiennej specjalnej IFS. Oznacza to, że łańcuch jest zbudowany. Jest więc dodatkowe obciążenie.
Z drugiej strony #rozwija się do liczby parametrów pozycyjnych.
Przykład:
$ command param1 param2
Tutaj,
Wartość $#wynosi 2, a wartość $*ciągu „param1 param2” (bez cudzysłowów), jeśli IFS jest rozbrojony. Ponieważ jeśli IFS nie jest ustawione, parametry są oddzielane spacjami
Aby uzyskać więcej informacji man bashi przeczytać temat o nazwie Parametry specjalne
[ $# -eq 0 ]jest najczęstszą postacią IME. Istnieją przypadki krawędzi, w których "$#"może być pusty: jeśli istnieje jeden argument, który jest pusty, lub jeśli istnieje kilka pustych argumentów i $IFSjest pusty.
"$*"Wyrażenie będzie również ocenić na ""razie tylko jeden ""parametr został przekazany. Ale przez większość czasu i tak prawdopodobnie nie będziesz się tym przejmować.
bash. Używasz shdo wykonania skryptu. AFAIK ==jest ważny tylko w bash.
Jeśli interesuje Cię zwolnienie za kaucją tylko w przypadku braku konkretnego argumentu, podstawienie parametru jest świetne:
#!/bin/bash
# usage-message.sh
: ${1?"Usage: $0 ARGUMENT"}
# Script exits here if command-line parameter absent,
#+ with following error message.
# usage-message.sh: 1: Usage: usage-message.sh ARGUMENT
jest to jeden ze sposobów, w jaki możesz wiedzieć, że nie dostałeś żadnych argumentów
NO_ARGS=0
if [ $# -eq "$NO_ARGS" ]; then
{do something}
fi
if ! (($#)); ..., lubif (($# == 0)); ..., lubif [ $# -eq 0 ]; ..., lub! (($#)) && ..., lub(($#)) || ...