이 스크립트가 있습니다.
#!/bin/bash
BASE_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" > /dev/null 2>&1 && pwd )"
USER_DEF=$(whoami)
function private {
read -p "Enter private chat name: " name
if [[ $name == '' ]] ; then
:
else
if [ -d "$BASE_DIR/chats/private/$name/" ] ; then
pass=$(cat "$BASE_DIR/chats/private/$name/pass")
read -s -p "Enter private chat password: " password
if [[ $password == $pass ]] ; then
chat "private" "$name"
count=$(find $BASE_DIR/chats/private/$name/ -type p)
if [[ "$count" == '' ]] ; then
rm -rf "$BASE_DIR/chats/private/$name"
fi
echo You exited private chat: $name
else
echo Wrong password
fi
fi
fi
unset $options
if [[ -e ./chats/public ]] ; then
options=($(find $BASE_DIR/chats/public -mindepth 1 -type d -printf '%f\n'))
fi
options+=("Enter private room")
options+=("Create public room")
options+=("Create private room")
options+=("Quit")
}
clear
read -r -p "Enter your name [$USER_DEF]: " UD
if [[ $UD = "" ]] ; then
USERNAME=$USER_DEF
else
USERNAME=$UD
fi
clear
echo Welcome back $USERNAME
echo We have this chat in public:
PS3='Please enter your choice: '
if [[ -e ./chats/public ]] ; then
options=($(find $BASE_DIR/chats/public -mindepth 1 -type d -printf '%f\n'))
fi
options+=("Enter private room")
options+=("Create public room")
options+=("Create private room")
options+=("Quit")
while true
do
int_count=1
for el in "${options[@]}"; do
echo "$int_count) $el"
int_count=$(expr $int_count + 1)
done
read -p "$PS3" optional
opt=${options[$(expr $optional - 1)]}
case $opt in
"Enter private room")
private # this is line 150
;;
"Create public room")
create_public
;;
"Create private room")
create_private
;;
"Quit")
echo "Bye, $USERNAME"
exit 0
;;
[a-zA-Z][a-zA-Z0-9]*)
public $opt
;;
esac
done
문제는 다음과 같습니다메뉴를 누르면 이 오류가 다시 1
발생 합니다.Enter
1
script.sh: line 150: private: command not found
그게 무슨 뜻이야? 1회 이상 사용할 수 없나요?
답변1
문제는 라인이다
unset $options
평가할 때 $options
무엇보다도 단어가 포함되어 있으므로 private
쉘이 기능을 정의하지 않습니다.
올바른 구문은 다음과 같습니다.
unset options