Описание тега life-of-ichabod
Неупомянутую переменной или подстановки команды не интерпретируется как строка, а как список имен шаблонов. То есть, значение переменной или результата выполнения команды разбивается на отдельные фрагменты, разделенные символы в МФС
(этот шаг называется Поле разделения); затем каждый кусок интерпретируется как поиск по шаблону, если шаблон соответствует несколько файлов, затем он заменяется на список совпадающих имен файлов, в противном случае шаблон остается в неизменном виде (этот шаг называется именем поколения).
Например, status_arr=( $(ГИТ статус-фарфор -б) )
наборы status_arr
в одноэлементный массив, содержащий 5-буквенная ?? АБ'
, потому что МФС
содержит только символ новой строки, и нет файла соответствует шаблону ?? АБ
. Если МФС
имел свое значение по умолчанию, содержащие пробел, затем status_arr
бы двухэлементный массив, содержащий два появления 2-буквенная АБ
.
Если переменной или подстановки команды в двойные кавычки, а затем полученная строка используется как: разделения поля и генерации имени файла применяются только для некотируемых замен.
Вы можете отключить именем поколения, полностью выполнив сет-Ф
. Это полезно, если вы хотите воспользоваться МФС
расщепления. Обратите внимание, что комплект -Ф
полностью отключает именем поколения, а не только на выходе из замен: комплект -Ф; Эхо *
всегда печатает *
.
#!/бин/Баш
Компании IFS=$'\п'
комплект -Ф
сенсорный АБ
status_arr=( $(состояние ЖКТ --фарфор -б) )
для (( Я=0; я<${#status_arr[@]}; я++ )); делать
Эхо "${status_arr[$я]}"
Эхо "${status_arr[$я]:0:2}"
сделано
(Вот, с именем поколения по-прежнему отключен, и учитывая, что элементы status_arr
не может содержать символы ИФС
на строительство, это безопасно, чтобы исключить двойные кавычки в Эхо
отчетности. Однако, это очень хрупкое — оно в значительной степени опирается на пути массиве был построен и в том, что состояние комплект -ф
, а значение сослагательного наклонения
не изменились с тех пор. Всегда используйте двойные кавычки вокруг переменной и команды заменами, если у вас есть хорошая причина, чтобы оставить их там, и вы знаете, что это ОК, чтобы сделать это.)