Сохранить возвращаемое значение функции в одном из ее собственных параметров

ls ведет себя по-разному при выводе в терминал или файл.

вывод в терминал по умолчанию идет в столбик, а вывод в файл - по одному файлу на строку.

просто используйте

ls -C
2
06.09.2016, 18:07
1 ответ

eval подходит, если вы используете его правильно:

Func1() {
  eval "$1=\$str1"
}

Безопасно, пока Func1 вызывается только с имена переменных, которые вы хотите передать.

Как всегда, переменные нужно заключать в кавычки. И здесь $ str1 не нужно расширять перед передачей в eval .

Если в Func1 могут быть переданы произвольные строки, которые не находятся под вашим контролем, тогда у вас возникнут проблемы со значениями вроде reboot; foo , и вам потребуется очистить его следующим образом:

Func1() {
  case $1 in
    "" |\
    *[!abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_]* |\
    [0123456789]* |\
    BASH* | LD_* | PATH | IFS | ENV | SHELLOPTS | PERL5LIB | PYTHON_PATH |...)
      echo >&2 "Can't set that variable"
      return 1
  esac
  eval "$1=\$str1"
}

Однако составить полный список проблемных переменных - обреченная задача.

1
27.01.2020, 22:19

Теги

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