Как проверить текущее значение IFS?

Я в настоящее время выполняю сценарий оболочки, и я подозреваю, что проблема может состоять в том, потому что я случайно изменил значение по умолчанию IFS, которая является пространством к чему-то еще.

Я хочу проверить текущее значение IFS, но я не знаю, как пойти о нахождении его.

Я запускаю свою Ubuntu на VMware.

7
задан 25 March 2014 в 11:04

4 ответа

> printf %q "$IFS"
' \t\n'

%q аргумент формата используется для интерполяции заключенной в кавычки переменной $IFS и выходит из управляющих символов, которые были бы интерпретированы оболочкой.

Здесь Вы видите, что IFS отделяется на пробелах, вкладках и новых строках.

11
ответ дан 16 November 2019 в 18:20

Как Вы, вероятно, уже знаете, значение по умолчанию IFS <space><tab><newline>. Используя:

echo "$IFS"

можно, вероятно, вывести, что существует символ новой строки и некоторые другие пробельные символы, но ничто верное.

, Чтобы быть уверенными в точном значении IFS переменная, можно обратиться к справке cat команда следующим образом:

echo "$IFS" | cat -ETv

, который эквивалентен с:

cat -ETv <<< "$IFS"

Демонстрационный вывод для значения по умолчанию IFS:

cat -ETv <<< "$IFS"
 ^I$
$

От предыдущего вывода можно вывести, что там уверенный один пробел вначале и символ новой строки. Но что является с другими странными символами. Давайте посмотрим man cat:

   -E, --show-ends
          display $ at end of each line

   -T, --show-tabs
          display TAB characters as ^I

   -v, --show-nonprinting
          use ^ and M- notation, except for LFD (n.a. linefeed or newline character) and TAB

Так, эти ^I последовательность от вышеупомянутого вывода означает один Символ табуляции и другой два $, символы означают конец строки.

9
ответ дан 16 November 2019 в 18:20
$ echo -n "$IFS" | od -abc
0000000  sp  ht  nl
        040 011 012
             \t  \n
0000003

http://www.fvue.nl/wiki/Bash:_Show_IFS_value

1
ответ дан 16 November 2019 в 18:20

Команда echo $IFS (отмечают отсутствие двойных кавычек) не может показать значение IFS правильно из-за слово, разделяющее .

, Например:

IFS=:
echo $IFS  # shows a blank line

Так, правильный способ отобразить IFS:

echo "$IFS"

Другие пути:

set | grep -w IFS # shows IFS= <час> 

Связанный:

Greg \t\n' printf '[%s]\n' "$IFS"
<час>

Связанный:

Greg
0
ответ дан 16 November 2019 в 18:20

Другие вопросы по тегам:

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