set world
Тогда:
if [ "${1%%w*}" ]
then
echo false
else
echo true
fi
w
, из исходной строки или:
if [ "$1" = "${1#w}" ]
then
echo false
else
echo true
fi
w
из исходной строки Это может произойти, если $PIPESTATUS
было объявлено как скалярная переменная или что-либо, что не является массивом или было сделано только для чтения, либо вами, либо кодом, найденным в вашем ~/.bashrc
/ ~/.bash_profile
... или потому что PIPESTATUS=
был в среде, когда bash
был запущен.
Вы можете проверить тип, атрибуты и значение $PIPESTATUS
с помощью typeset -p PIPESTATUS
.
Затем $PIPESTATUS
остается скалярным и не преобразуется автоматически в массив для хранения статусов выхода компонентов конвейера:
$ env PIPESTATUS= bash -c 'false | true; typeset -p PIPESTATUS'
declare -x PIPESTATUS=""
$ bash -c 'PIPESTATUS=; false | true; typeset -p PIPESTATUS'
declare -- PIPESTATUS=""
$ bash -c 'typeset -A PIPESTATUS; false | true; typeset -p PIPESTATUS'
declare -A PIPESTATUS
$ bash -c 'readonly PIPESTATUS; false | true; typeset -p PIPESTATUS'
declare -r PIPESTATUS
За исключением случая readonly
, который можно обойти, преобразовав переменную обратно в массив или удалив ее:
typeset -a PIPESTATUS # beware it can affect the scope if run from a function
unset -v PIPESTATUS