Расширение (без каламбура) на ответы birryree's и halloleo: общий подход заключается в использовании eval
, но он содержит некоторые важные предостережения, а именно пробелы и перенаправление вывода (>
) в переменной. Кажется, что для меня работает следующее:
mypath="$1"
if [ -e "`eval echo ${mypath//>}`" ]; then
echo "FOUND $mypath"
else
echo "$mypath NOT FOUND"
fi
Попробуйте его с каждым из следующих аргументов:
'~'
'~/existing_file'
'~/existing file with spaces'
'~/nonexistant_file'
'~/nonexistant file with spaces'
'~/string containing > redirection'
'~/string containing > redirection > again and >> again'
${mypath//>}
удаляет >
символы, которые могут сбивать файл во время eval
. eval echo ...
- это то, что делает фактическое расширение тильды -e
предназначены для поддержки имен файлов с пробелами. Возможно, есть более элегантное решение, но это то, что я смог придумать.