Я не поймите, что вы пытаетесь сделать. Ваш код устанавливает SPC
в строку длины 1, единственный символ которой является пробелом.Это очень запутанный способ сделать это: SPC = ""
будет работать так же хорошо и быть понятным.
Я не просмотрел весь ваш сценарий, но позже я обнаружил, что что-то не так: вы пишете что-то вроде «URL ^ Just $ SPCthe $ SPCmailto $ SPCURL»
. Это создает строку URL ^ Just
, потому что переменные $ SPCthe
, $ SPCmailto
и $ SPCURL
не определены. Когда за расширением переменной сразу следует символ, который может быть частью имени переменной, вам необходимо указать конец имени переменной , например, заключив имя в фигурные скобки: URL ^ Просто $ {SPC} URL $ {SPC} mailto $ {SPC}
. Я не понимаю, почему вы не пишете «URL ^ Просто URL mailto»
.
Для кодирования небольших хеш-таблиц я предлагаю использовать два массива, один для ключей и один для значений. Таким образом, вы можете хранить произвольные строки, не опасаясь проблем с кодировкой. Вот набросок того, как могут выглядеть поиск и добавление (используя имена ключей
и массивов значений
в качестве параметров, оставленных в качестве упражнения):
lookup () { # $1=key; set value to the value found
for ((i=1; i<=${#keys}; i++)); do
if [[ ${keys[$i]} = $1 ]]; then value=${values[$i]}; return 0; fi
done
unset value; return 1
}
add () { # $1=key $2=value
for ((i=1; i<=${#keys}; i++)); do
if [[ ${keys[$i]} = $1 ]]; then values[$i]=$2; return; fi
done
keys[$i]=$1; values[$i]=$2
}
Более эффективный метод был бы быть для хранения каждой записи в переменной оболочки. Например, если таблица foo
отображает somekey
в somevalue
, то установите переменную table_foo_somekey = somevalue
. Вам необходимо закодировать ключи в буквенно-цифровые символы, что нетривиально (один из методов - хеширование ключей, напримерс sha1 и сохраните ключ в table_foo _ $ {sha1_of_somekey} _key
и значение в table_foo _ $ {sha1_of_somekey} _key
). Если вам нужно перечислить ключи в таблице, вам нужно сохранить список отдельно.
Или, когда вам нужны вещи, выходящие за рамки возможностей простой оболочки, вы можете обратиться к более мощному инструменту. Ksh93 (не pdksh), bash 4 и zsh имеют ассоциативные массивы. Помимо этого, есть Perl, Python и прочие.
El comando
chattr -i /testdir
eliminará esta bandera. Luego creas el nuevo archivo y otra vez
chattr +i /testdir
debe configurar solo r
y x
del directorio principal para el grupo y otros para evitar eliminar el directorio
La forma de conseguir lo que necesitas es:
chattr +a /testdir
Configure los permisos en el propio directorio para que solo el propietario tenga permisos de escritura.
El interruptor a
hace que los archivos se puedan crear y modificar internamente pero no eliminar.
La página man
para chattr
solo dice lo que hace a
para los archivos, pero de hecho hace lo anterior cuando se usa en un directorio, como descubrí yo mismo cuando buscaba una manera de hacer lo mismo.