Пробелы для переменных в сценарии bash

>> netstat -tunalp | grep :80  
tcp6       0      0 :::80                   :::*                    LISTEN      9480/httpd          

Вы собирались прослушивать только соединения ipv6? (видите, что строка начинается с tcp6?) Если вы хотите, чтобы он только связывался с адресом ipv4, попробуйте использовать Listen 0.0.0.0:80 вместо этого.

5
09.03.2017, 01:42
3 ответа

Просто удалите внутренние двойные кавычки:

fpath="${HOME}/New Folder/foobar.txt"

Поскольку все содержимое переменной заключено в двойные кавычки, вам не нужно этого делать второй раз. Причина, по которой это работает из интерфейса командной строки, заключается в том, что Bash сначала оценивает кавычки. Он не работает в переменной, потому что кавычки с обратной косой чертой рассматриваются как буквальная часть пути к каталогу.

7
27.01.2020, 20:32

Кавычки не являются частью имени папки, не так ли?

Это должно сработать:

fpath="$HOME/New Folder/foobar.txt"
ls "$fpath"
3
27.01.2020, 20:32

Есть ли способ заставить ls отображать путь из моего скрипта?

Да, использовать:

ls $HOME/New\ Folder/foobar.txt

Проблема заключалась в том, что вы включая кавычки внутри значения переменной. Настоящее имя каталога не имеет кавычек ".

Вам нужно создать переменную только с одним методом цитирования.

В переменных:

fpath=${HOME}/New\ Folder/foobar.txt

Или:

fpath="${HOME}/New Folder/foobar.txt"

Или даже:

fpath=${HOME}/'New Folder/foobar.txt'

Полный сценарий:

#!/bin/bash
fpath=${HOME}/New\ Folder/foobar.txt
echo "fpath=(${fpath})"
ls "${fpath}"
5
27.01.2020, 20:32

Теги

Похожие вопросы