Я в настоящее время выполняю сценарий оболочки, и я подозреваю, что проблема может состоять в том, потому что я случайно изменил значение по умолчанию IFS, которая является пространством к чему-то еще.
Я хочу проверить текущее значение IFS, но я не знаю, как пойти о нахождении его.
Я запускаю свою Ubuntu на VMware.
> printf %q "$IFS"
' \t\n'
%q
аргумент формата используется для интерполяции заключенной в кавычки переменной $IFS
и выходит из управляющих символов, которые были бы интерпретированы оболочкой.
Здесь Вы видите, что IFS отделяется на пробелах, вкладках и новых строках.
Как Вы, вероятно, уже знаете, значение по умолчанию 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
последовательность от вышеупомянутого вывода означает один Символ табуляции и другой два $
, символы означают конец строки.
$ echo -n "$IFS" | od -abc
0000000 sp ht nl
040 011 012
\t \n
0000003
Команда 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