Если бы у вас было k = k $ i
, он добавлял бы в каждую итерацию, обрабатываемую в данный момент поле в конце k
(так что вы получите: 123321333).
Если бы у вас было k = k FS $ i
, вы бы получили -123-321-333.
Тернар, если только гарантирует, что в начале нет дефиса, потому что, когда awk обрабатывает $ 1, k пусто и, следовательно, тернарно, если возвращает "".
Я использовал следующую функцию в моем скрипте, чтобы выполнить это:
getPIDLock () {
if [ ! -e "$LockFile" ]; then
return 0 # Not an error, but lsof will emit a lot of text if the file doesn't exist
fi
local PIDLock=$( lsof -F p "$1" | head -n 1 )
local strEcho='echo ${PID:1}'
bash -c "PID=\"$PIDLock\";$strEcho;" # Assuming system has BASH, but not assuming that the default shell is BASH
return 0
}
Это будет выдавать PID, если файл, о котором идет речь, имеет блокировку; в противном случае будет выдана пустая строка.
PID=$( getPIDLock "/path/to/pidfile" )
if [ -n $PID ]; then
# Do your thing
fi