Это один из способов:
args=("key1" "key2" "key3")
keys=${args[@]/%/\\|} # result: key1\| key2\| key3\|
keys=${keys// } # result: key1\|key2\|key3\|
grep "${keys}" file_name
Редактировать:
На основании Предложение Павла Шведа :
( IFS="|"; keys="${args[*]}"; keys="${keys//|/\\|}"; grep "${keys}" file_name )
Первая версия в виде одной строки:
keys=${args[@]/%/\\|}; keys=${keys// }; grep "${keys}" file_name
Edit2:
Даже лучше, чем версия с использованием IFS
:
printf -v keys "%s\\|" "${args[@]}"; grep "${keys}" file_name