2016-04-26 5 views
1
#!/bin/bash 
# exitlab 
# 
# example of exit status 
# check for non-existent file 
# exit status will be 2 
# create file and check it 
# exit status will be 0 
# 
ls xyzzy.345 > /dev/null 2>&1 
status='echo $?' 
echo "status is $status" 

# create the file and check again 
# status will not be 0 
touch xyzzy.345 

ls xyzzy.345 > /dev/null 2>&1 
status='echo $?' 
echo "status is $status" 

#remove the file 
rm xyzzy.345 

edx.org имеет лабораторию, и это сценарий. Когда я запускаю его, вывод заключается в следующем:Bash код выхода код ошибки сценария

status is echo $? 
status is echo $? 

Я думаю, что выход должен быть 0 или 2. Я попытался положить круглые скобки, как status='(echo $?) но это приводит к status is echo $?. Затем я попытался поставить круглые скобки за пределами одиночных кавычек status=('echo $?'), но это дало мне тот же результат status is echo $?.

Любые идеи?

+0

Я хотел бы использовать 'эхо "статус" $' или 'STT = $ ?; echo "status is" $ stt' –

ответ

-1

Для замены переменных вам нужно использовать двойные кавычки. Изменение

status='echo $?' 

в

status="echo $?" 

Вы могли бы найти это руководство полезным: Bash Guide for Beginners

+0

Спасибо. Это создало правильный вывод 'status is echo 2' и ' status is echo 0'. Пожалуйста, ответьте на мой вопрос, чтобы я мог дать вам очки. – Debug255

+0

Я предполагаю, что вас интересует, как работают кавычки, а не в обратном направлении. Я обновил свой ответ. Одиночные кавычки защищают $, тогда как двойные кавычки допускают замещение. HTH – Dinesh

1

Вы ищете подстановки команд (status=$(echo $?)), хотя это не является необходимым. Вы можете присвоить значение $? непосредственно status:

status=$? 
+0

Спасибо. Это сценарий, который предоставляется на edx.org. Ваш совет имеет смысл для сценариев, которые мне могут понадобиться для этого. – Debug255

Смежные вопросы