Я запускаю некоторый скрипт, который передает строковый аргумент, и я хочу сделать, если инструкция else показана ниже:
if [ $1 != '' ] && [ $2 != '' ]
then
do something.....
, но она показала Error too many argument. Почему?
Поскольку это помечено bash, я рекомендую использовать расширенную тестовую конструкцию ([[...]]) и забыть кавычки:
if [[ -z $1 && -z $2 ]]; then
...
Если вы не собираетесь на sh / POSIX, нет причин не использовать [[ ]].
Это также будет работать,
if [ "$1" == "" && "$2" == ""]; then
echo NULL
fi
Очень часто подход, который вы видите вокруг, таков:
if [ "x$var1" == "x" ] && [ "x$var2" == "x" ];
then
echo "both variables are null"
fi
Часто он используется, чтобы избежать непредвиденных последствий, таких как изменение переменной. Чаще всего вы увидите, что он используется как if [ "x$var" != "x" ]