Question answers
diff --git a/README.md b/README.md
index ef085ff86..ebdf1cdfd 100644
--- a/README.md
+++ b/README.md
@@ -3011,6 +3011,12 @@ Should be `x=2`
 
 <details>
 <summary>How to store the output of a command in a variable?</summary><br><b>
+
+```
+OUTPUT=$(ls -1)
+echo "${OUTPUT}"
+```
+[Source](https://stackoverflow.com/questions/4651437/how-do-i-set-a-variable-to-the-output-of-a-command-in-bash)
 </b></details>
 
 <details>
@@ -3512,6 +3518,13 @@ execution or run forever, you may want to run them in the background instead of
 
 <details>
 <summary>How can you find how much memory a specific process consumes?</summary><br><b>
+<code>
+mem()
+{                                                                                                      
+    ps -eo rss,pid,euser,args:100 --sort %mem | grep -v grep | grep -i $@ | awk '{printf $1/1024 "MB"; $1=""; print }'
+}
+</code>
+[Source](https://stackoverflow.com/questions/3853655/in-linux-how-to-tell-how-much-memory-processes-are-using)
 </b></details>
 
 <details>
@@ -13438,6 +13451,9 @@ In Copyleft, any derivative work must use the same licensing while in permissive
 
 <details>
 <summary>What is faster than RAM?</summary><br><b>
+
+CPU cache.
+[Source](https://www.enterprisestorageforum.com/hardware/cache-memory/)
 </b></details>
 
 <details>
diff --git a/scripts/random_question.py b/scripts/random_question.py
new file mode 100644
index 000000000..691125d7c
--- /dev/null
+++ b/scripts/random_question.py
@@ -0,0 +1,50 @@
+import random
+import optparse
+
+
+def main():
+    """ Reads through README.md for question/answer pairs and adds them to a list to randomly select from and quiz yourself. 
+        - supports skipping quesitons with no documented answer with the -s flag
+    """
+    parser = optparse.OptionParser()
+    parser.add_option("-s", "--skip", action="store_true",help="skips questions without an answer.", default=False)
+    options, args = parser.parse_args()
+    
+    with open('README.md', 'r') as f:
+        text = f.read()
+        
+    questions = []
+    
+    while True:
+        question_start = text.find('<summary>') + 9
+        question_end = text.find('</summary>')
+        answer_end = text.find('</b></details>')
+        
+        if answer_end == -1:
+            break
+        
+        question = text[question_start: question_end].replace('<br>', '').replace('<b>', '')
+        answer = text[question_end + 17: answer_end]
+        questions.append((question, answer))
+        text = text[answer_end + 1:]
+        
+    num_questions = len(questions)
+    
+    while True:
+        try:
+            question, answer = questions[random.randint(0, num_questions)]
+            
+            if options.skip and not answer.strip():
+                continue
+            
+            if input(f'Q: {question} ...Show answer? "y" for yes: ').lower() == 'y':
+                print('A: ', answer)
+        
+        except KeyboardInterrupt:
+            break
+        
+    print("\nGoodbye! See you next time.")
+                
+
+if __name__ == '__main__':
+    main()

3 question answers.