Почему эта идиома bash требует eval?

Чтобы добавить конечную косую черту для каталогов, просто измените свой код, включив параметр -F в _tree.sh :

tree -F -L 2 --charset ascii -I "_tree.sh|LICENSE|README.md|node_modules|nbproject"

Объяснение

Программа tree (например, версия 1.7. 0) по умолчанию не добавляет завершающие слэши. Как указывает @steeldriver, это может быть связано только с опцией -F , включенной где-то в вашей системе, например в пределах ~ / .bashrc или ~ / .bash_aliases ] определен как псевдоним, поэтому вы видите завершающие слэши при запуске tree на терминале. Чтобы в ваших сценариях также были завершающие слэши, просто добавьте параметр -F в команду tree .

1
06.05.2019, 13:55
1 ответ

Из-за дополнительных кавычек вокруг 5-го элемента (регулярное выражение:[5]="'^[^#]*sshfs#'").

Команде grep будет передан аргумент в форме '^regex'вместо ^regex, который никогда не будет совпадать (regexне может одновременно следовать одинарной кавычке и начать в начале строки, в то же время ).

Удалите их, а затем укажите расширение массива("${_gopts[@]}"вместо${_gopts[@]}):

declare -p _gopts
declare -a _gopts=([0]="--extended-regexp" [1]="--with-filename" [2]="--recursive" [3]="--include" [4]="fstab" [5]="^[^#]*sshfs#" [6]="/etc")

_results=$( grep "${_gopts[@]}" )

Вы также можете использовать одинарные кавычки вместо двойных в объявлении массива. :Двойные кавычки не нужны, так как ни один элемент не содержит переменных и других расширений.

2
27.01.2020, 23:30

Теги

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