Как я могу проверить, является ли какая-то строка точкой в bash? Я попытался это:Тест на точку в bash
if [ "$var" = "." ]
и это:
if [ "$var" = "\." ]
Но это не работает.
Как я могу проверить, является ли какая-то строка точкой в bash? Я попытался это:Тест на точку в bash
if [ "$var" = "." ]
и это:
if [ "$var" = "\." ]
Но это не работает.
работает для меня:
$ d=.
$ if [ $d = '.' ];then echo 'yes'; else echo 'no'; fi
yes
$ d=foo
$ if [ $d = '.' ];then echo 'yes'; else echo 'no'; fi
no
Мой код:
#!/bin/bash
var="."
[ $var = "." ] && echo "Yup, it equals '.'"
exit 0
который печатает:
Yup, it equals '.'
отлажена:
[email protected]:~$ /bin/bash -x ./foo.sh
+ var=.
+ '[' . = . ']'
+ echo 'Yup, it equals '\''.'\'''
Yup, it equals '.'
+ exit 0
Возможно, у вас есть пробел в $var
(или, может быть, $var
пуст?), Запустите его через /bin/sh -x ./yourscript.sh
, чтобы посмотреть, что его фактически сравнивает.
Имейте в виду, == является bashism, он работает только в Bash. Его там как комфорт для людей, которые привыкли к одному =, что приводит к назначению . Это нормально, если вы используете только bash, но вы никогда не знаете, что/bin/sh на некоторых системах может указывать. Лучше всего использовать = и вообще избежать проблемы.
делает 'echo '$ {var}'' производят '.' без пробелов или дополнительных символов? Запустите свой скрипт как/bin/bash -x ./scriptname, чтобы узнать, что происходит на самом деле. –
Можете ли вы опубликовать короткий, простой пример сценария и результаты, которые вы демонстрируете, что «это не работает», потому что он отлично подходит для меня. –