Первый пример, который вы привели, верен (если он подразумевает очевидную вещь):
for file in "$workingdir"/*; do
Это перебирает список файлов в каталоге, соответствующих значению переменной workingdir
, и работает, даже если он содержит пробелы или другие забавные символы.
Однако второй пример более сложный:
if [[ $workingdir == $variable* ]]; then
В этом случае значение переменной variable
будет считаться шаблоном, а не фиксированной строкой. Например, если variable
было установлено «* foo», общее условие будет совпадать, если в $workingdir
любом его значении содержится «foo». Если вы хотите, $variable
чтобы с ним обращались как с литеральной строкой, а не с шаблоном, вам снова пришлось бы поместить ее в двойные кавычки (но не в том случае *
, если вы хотите , чтобы это обрабатывалось как подстановочный знак):
if [[ $workingdir == "$variable"* ]]; then
... и, честно говоря, отслеживание того, где двойные кавычки имеют значение, а где нет, - больше проблем, чем стоит. (то есть безопасно оставлять их слева =
или ==
внутри, [[ ]]
но не справа или внутри [ ]
). Поэтому я просто рекомендую везде заключать их в двойные кавычки, чтобы вам не приходилось следить за этим:
if [[ "$workingdir" == "$variable"* ]]; then